Кафка, настройка стратегии для репликации? - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть два сервера VM (скажем, S1 и S2), и мне нужно установить kafka в кластерном режиме, где будет topi c только с одним разделом и двумя репликами (один является лидером сам по себе, а другой последователем) для надежности ,

Получил идею высокого уровня из этой настройки кластера Хотите подтвердить, если приведенная ниже стратегия верна.

  1. Сначала настройте zookeeper в качестве кластера на обоих узлах для обеспечения высокой доступности (ГК). Если я выполню настройку zk только на одном узле, а затем этот узел выйдет из строя, полный кластер будет недоступен. Правильно ? Обязательно ли использовать zk в последней версии kafka? Похоже, это необходимо для более старой версии Является ли Zookeeper обязательным для Kafka?
  2. Запустить брокер kafka на обоих узлах. Он может быть на том же порту, что и на разных узлах.
  3. Создать Topi c на любом узле с разделом 1 и репликой как два.
  4. zookeeper выберет любого брокера на одном узле в качестве лидера, а другой в качестве последователя.
  5. Производитель подключится к любому брокеру и начнет публикацию сообщения.
  6. Если лидер выйдет из строя, zookeeper автоматически выберет другой узел в качестве лидера. Не знаете, как теперь будет поддерживаться реплика 2, поскольку сейчас существует только один живой узел?

Правильна ли указанная выше стратегия?

Полезные ресурсы

ISR

ISR против коэффициента репликации

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Сначала настройте zookeeper в качестве кластера на обоих узлах для обеспечения высокой доступности (HA). Если я выполню настройку zk только на одном узле, а затем этот узел выйдет из строя, полный кластер будет недоступен. Правильно ? Обязательно ли использовать zk в последней версии kafka? Похоже, что это необходимо для более старой версии Zookeeper является обязательным для Кафки?

Ответ: Да. Zookeeper по-прежнему должен, пока не будет выпущено KIP-500 . Zookeeper отвечает за выбор контроллера, хранение метаданных о кластере Kafka и управление членством в брокере ( ссылка ). В идеале количество узлов Zookeeper должно быть не менее 3. Таким образом, вы можете допустить сбой одного узла. (2 здоровых узла Zookeeper (большинство в кластере) по-прежнему способны выбирать контроллер)) Вам также следует рассмотреть возможность установки кластера Zookeeper на других машинах, отличных от машин, на которых установлена ​​Kafka. Таким образом, отказ сервера не приведет к потере узлов Zookeeper и Kafka.

Запустите брокер kafka на обоих узлах. Он может находиться на том же порту, что и на разных узлах.

Ответ: Сначала следует запустить кластер Zookeeper, а затем кластер Kafka. Подходят одинаковые порты на разных узлах.

Создайте Topi c на любом узле с разделом 1 и репликой как два.

Ответ: Разделы используются для горизонтальной масштабируемости. Если вам это не нужно, один раздел в порядке. При наличии коэффициента репликации 2 один из узлов будет лидером, а один из узлов будет подписчиком в любое время. Но этого недостаточно для полного предотвращения потери данных, а также для обеспечения высокой доступности. У вас должно быть не менее 3 брокеров Kafka, 3 коэффициента репликации разделов, min.insync.replicas=2 в качестве конфигурации брокера и acks=all в качестве конфигурации производителя в идеальной конфигурации, позволяющей избежать потери данных, не подвергая риску HA. (вы можете проверить this для получения дополнительной информации)

zookeeper выберет любого брокера на одном узле в качестве лидера, а другой в качестве последователя

Ответ: Контроллер-брокер отвечает за поддержание отношений лидер / последователь для всех разделов. Один брокер будет лидером раздела, а другой - подписчиком. С помощью этой команды вы можете проверить лидеров / подписчиков разделов.

bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic

Производитель подключится к любому брокеру и начнет публикацию сообщения.

Ответ: Да. Для подключения к кластеру Kafka достаточно указать только одного брокера bootstrap .servers. Но для избыточности вы должны предоставить более одного посредника в bootstrap .servers.

bootstrap .servers : список пар хост / порт, которые следует использовать для установления начальное подключение к кластеру Kafka. Клиент будет использовать все серверы независимо от того, какие серверы указаны здесь для начальной загрузки - этот список влияет только на исходные хосты, используемые для обнаружения полного набора серверов. Этот список должен иметь вид host1: port1, host2: port2, .... Поскольку эти серверы просто используются для начального подключения, чтобы обнаружить полное членство в кластере (которое может изменяться динамически), этот список не должен содержать полный набор из серверов (однако вам может потребоваться более одного, если сервер не работает).


Если лидер отключается, zookeeper автоматически выберет другой узел в качестве лидера. Не знаете, как теперь будет поддерживаться реплика 2, поскольку сейчас работает только один узел?

Ответ: Если брокер Controller отключится, Zookeeper выберите другого брокера в качестве нового контроллера. Если брокер, являющийся лидером вашего раздела , рухнет, новым лидером станет одна из синхрелий c. (Контроллер-брокер отвечает за это) Но, конечно, если у вас есть только два брокера, репликация не будет возможна. Вот почему в вашем кластере Kafka должно быть не менее 3 брокеров.

1 голос
/ 22 февраля 2020

Да - ZooKeeper по-прежнему необходим на Kafka 2.4 , но вы можете прочитать о KIP-500 , который планирует удалить зависимость от ZooKeeper в ближайшем будущем и начать использовать Raft Алгоритм для создания кворума.

Как вы уже поняли, если вы установите ZK на одном узле, он будет работать в автономном режиме и у вас не будет никакой отказоустойчивости. Ансамбль classi c ZK состоит из 3 узлов и позволяет вам потерять 1 узел ZK.

Направив брокеров Kafka вправо ZK cluster , вы можете запустите брокеров, и кластер будет запущен и работает.

В вашем примере я бы предложил вам создать еще один узел, чтобы повысить устойчивость и обеспечить требуемый коэффициент репликации, при этом сохраняя возможность потеря одного узла без потери данных.

Помните, что использование одного раздела означает, что вы ограничены одним потребителем на группу потребителей. Остальные потребители будут бездействовать.

Я предлагаю вам прочитать этот блог о Kafka Best Practices и о том, как выбрать количество тем / разделов в кластере Kafka .

...