Влияние переназначения разделов Kafka на производительность

У меня есть производственный кластер Kafka с 5 узлами и примерно 500 темами. Мне нужно расширить свой кластер, чтобы добавить 2 новых узла, и, поскольку Kafka не обеспечивает автоматическое перераспределение данных, я хочу запустить kafka-reassign-partitions.sh, поставляемый вместе с дистрибутивом Kafka, чтобы перебалансировать все мои темы в общих 7 узлах в кластере.

Поскольку в моем кластере уже есть большой объем производственных данных,

  1. Будет ли запуск этого сценария блокировать любые одновременные записи в мои темы Kafka?
  2. Будет ли запуск этого сценария замедлять работу моего кластера / производителей / потребителей?
  3. Как я могу остановить этот скрипт во время его выполнения, если мой кластер начнет некорректно работать во время выполнения этого скрипта?

В настоящее время я использую Kafka v0.8.2.0 с несколькими производителями и несколькими потребителями.


person Vijay Kansal    schedule 12.09.2016    source источник


Ответы (1)


Что делает Kafka-reassign-partitions:

  1. При необходимости создайте новые реплики на новых брокерах.
  2. Попросите их копировать данные, пока они не догонят лидера
  3. При необходимости инициируйте выборы лидера
  4. Удалите реплики там, где это необходимо

На этапе выбора лидера запись будет отложена (как и при любом отказе лидера). Потребители / производители могут замедлиться, потому что дополнительная репликация требует дисковых и сетевых ресурсов (иногда значительных ресурсов). Вы не можете остановить это во время выполнения. Я имею в виду, что вы можете удалить соответствующий узел из ZK, но на самом деле он не был протестирован, и созданные новые реплики останутся ... Я бы не стал пробовать. Если вы обеспокоены, я рекомендую перемещать разделы за раз.

В версии 0.10.1.0 (теперь функция замораживания) мы добавим возможность ограничивать работу по повторному назначению, что ограничит влияние на производительность производителей и потребителей.

person Gwen Shapira    schedule 12.09.2016
comment
как определить, на сколько дросселировать переназначение? - person peetasan; 04.07.2018
comment
Это сложный вопрос. Обычно я работаю со своей сетевой командой, чтобы определить, какая пропускная способность доступна, и я знаю, сколько данных я переместу, а иногда я знаю, сколько времени мне нужно, чтобы это занять ... так что вы найдете число, которое работает с этими ограничениями. - person Gwen Shapira; 10.07.2018
comment
@GwenShapira, а что, если я запускаю кластер без репликации (меня не волнует потеря данных). Если у меня есть тема со 100 разделами, работающими на 3 брокерах, и я добавил еще 1 брокера. Что здесь будет? Поскольку на новом брокере нет реплик, которые нужно создать, как раздел будет перемещен на нового брокера? Спасибо - person vishnu viswanath; 16.08.2018
comment
@vishnuviswanath вам нужно запустить скрипт kafka-reassign-partitions.sh для переназначения разделов между брокерами kafka - person Vijay Kansal; 13.09.2018
comment
@VijayKansal, спасибо. Мой вопрос заключался в том, как данные будут скопированы на новые узлы. В исходном вопросе создается новая реплика, и данные перемещаются в новую реплику. (это не влияет на производительность). В моем примере, поскольку у меня нет реплики, интересно, как будут работать 4 шага, упомянутые Гвен? (поскольку все эти шаги основаны на репликах, и ни один брокер не является последователем). - person vishnu viswanath; 13.09.2018
comment
Это все равно сработает для вас. Вы работаете с коэффициентом репликации 1. При запуске kafka-reassign-partitions.sh вы можете либо указать, какие брокеры должны быть узлами реплик раздела темы, либо вы можете сделать так, чтобы сам сценарий выбирал случайных брокеров для вашего раздела темы. . Таким образом, новые реплики будут создаваться на новых брокерах с копированием данных на них и догонять текущего лидера, за которым последуют выборы нового лидера, и, наконец, ненужные реплики будут удалены. - person Vijay Kansal; 16.09.2018
comment
@VijayKansal отлично. Спасибо :) - person vishnu viswanath; 19.09.2018