Потрясающий! Kafka移除了Zookeeper!

Java Kafka
Потрясающий! Kafka移除了Zookeeper!

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

Празднуйте весь день! Последняя версияKafka 2.8.0, удалил паруZookeeperзависимости, черезKRaftСделайте свое собственное управление кластером. Очень хорошо, наконец-то немного качественных изменений.

Как только мы слышим KRaft, мы думаем о протоколе Raft. Протокол Raft — самый популярный на сегодняшний день алгоритм распределенной координации, и на нем строится основа таких систем, как Etcd и Consul. Теперь он есть и у Кафки.

Поскольку эта функция слишком новая, ZooKeeper по-прежнему используется по умолчанию в версии 2.8.0, но это не мешает нам ее опробовать. Кроме того, не стоит слишком волноваться, согласно официальным заявлениям, некоторые функции не слишком совершенны, поэтому не используйте их онлайн.

Набор систем с открытым исходным кодом для учебных целей, добро пожаловать в звезду:GitHub.com/star hotel о, хорошо/неплохо…. Он включает в себя сложный бизнес ToB, бизнес с высокой степенью параллелизма в Интернете, приложение кэширования, DDD, руководство по микросервисам. Управляемый моделью, управляемый данными. Поймите путь эволюции крупномасштабных сервисов, навыки кодирования, изучите Linux и настройте производительность. Помощь Docker/k8s, мониторинг, сбор логов, изучение промежуточного ПО. Front-end технология, back-end практика и т.д. Основная техника:SpringBoot+JPA+Mybatis-plus+Antd+Vue3.

1. Как запустить Крафт?

Kafka использует встроенный KRaft для замены ZooKeeper, что является очень большим улучшением, поскольку в распределенных системах, таких как ES, синхронизация метаинформации кластера является циклической.

Но как начать с KRaft? Многие студенты прямо запутались, да и информации на этот счет относительно мало, но пользоваться ею очень просто.

Мы заметили, что в каталоге config есть дополнительный файл с именемkraftкаталог, который содержит новый набор конфигурационных файлов, что позволяет напрямую отказаться от зависимости от ZK.

image-20210428164657222.png

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

# ./bin/kafka-storage.sh random-uuid
# ./bin/kafka-storage.sh format -t TBYU7WMiREexuZqrjKG60g -c ./config/kraft/server.properties
# ./bin/kafka-server-start.sh ./config/kraft/server.properties

После потрескивающей операции была запущена No ZK's Kafka.

image-20210428165304381.png

Это так просто.

2. Как это настраивается?

Кафка добавил внутреннюю тему под названием@metadata, используемый для хранения этой метаинформации.

Далее мы рассмотрим некоторые ключевые сведения о конфигурации. ты можешь использоватьvimdiff config/server.properties config/kraft/server.propertiesВзгляните на эти основные различия.

Во-первых, у крафта есть дополнительная функция, которая называетсяprocess.rolesКонфигурация. В нашем конфигурационном файле это выглядит так.

process.roles=broker,controller 

На самом деле он имеет три значения.

  • broker: Эта машина будет действовать только как брокер
  • controller: начать как один из контроллеров кворума Raft
  • broker,controller: содержит функции обоих

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

Дальше идет смена адреса прослушивания, т.к. у нашего сервера две функции, значит нам нужно открыть два порта.

listeners=PLAINTEXT://:9092,CONTROLLER://:9093

Кроме того, есть нечто, называемое node.id. В отличие от оригинального broker.id, этот nodeid используется для голосования.

node.id=1   

Из-за особенностей протокола raft наша конфигурация голосования будет использовать указанный выше node.id. Странно писать, не так ли? Но это лучше, чем у Zk. Таким образом, эти конфигурации могут быть изменены в более поздних версиях.

controller.quorum.voters=1@localhost:9093

Это главное отличие конфигурационных файлов. Давайте посмотрим на его коллекцию.

process.roles=broker,controller 
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
node.id=1   
controller.quorum.voters=1@localhost:9093

3. Зачем убивать ЗК?

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

Zookeeper очень громоздкий и требует нечетного количества узлов для конфигурации кластера, что делает его неудобным для расширения и сжатия. Способ настройки Zk тоже совсем не такой как у kafka.Для оптимизации Kafka надо учитывать другую систему.Это действительно собака.

Если Kafka хочет развиваться в легком, нестандартном направлении, он должен убить Zk.

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

Студенты, которые использовали Kafka-admin, должны быть знакомы с медленной синхронизацией данных мониторинга. Ему нужно отвернуться от zk, чтобы получить некоторую информацию о метаданных, а затем извлечь данные из интерфейса JMX Kafka. Просто блуждая таким образом, можно почти убить большое скопление.

4. Какие будут изменения?

Развертывание проще.

Во-первых, упрощается развертывание. Для некоторых систем, которые не гонятся за высокой доступностью, даже процесс может запустить прекрасную kafka. Нам не нужно подавать заявку на дружественные к зоопарку SSD-диски, и нам не нужно обращать внимание на то, хватит ли емкости zk.

Мониторинг удобнее.

Во-вторых, за счет концентрации информации становится легко получать мониторинговую информацию от Кафки, и нет необходимости обходить зк. Интеграция с такими системами, как grafana/kibana/promethus, не за горами.

Быстрее.

Самое главное, конечно, скорость. Raft проще для понимания и более эффективен, чем протокол ZAB ZK, и основные выборы раздела станут быстрее,controller Скорость планирования будет на высоте.

В будущем такого способа подключения больше не будет.

zookeeper.connect=zookeeper:2181	

Вместо этого остается только метод подключения bootstrap. Узлы Kafka все больше и больше похожи на одноранговые узлы.

bootstrap.servers=broker:9092

Kafka также предоставляет инструмент под названиемkafka-metadata-shell.shИнструмент может видеть распределение тем и разделов.Эту информацию раньше можно было получить через zk, а теперь можно получить с помощью этой командной строки.

$ ./bin/kafka-metadata-shell.sh  --snapshot /tmp/kraft-combined-logs/\@metadata-0/00000000000000000000.log
>> ls /
brokers  local  metadataQuorum  topicIds  topics
>> ls /topics
foo
>> cat /topics/foo/0/data
{
  "partitionId" : 0,
  "topicId" : "5zoAlv-xEh9xRANKXt1Lbg",
  "replicas" : [ 1 ],
  "isr" : [ 1 ],
  "removingReplicas" : null,
  "addingReplicas" : null,
  "leader" : 1,
  "leaderEpoch" : 0,
  "partitionEpoch" : 0
}
>> exit

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

Набор систем с открытым исходным кодом для учебных целей, добро пожаловать в звезду:GitHub.com/star hotel о, хорошо/неплохо…. Он включает в себя сложный бизнес ToB, бизнес с высокой степенью параллелизма в Интернете, приложение кэширования, DDD, руководство по микросервисам. Управляемый моделью, управляемый данными. Поймите путь эволюции крупномасштабных сервисов, навыки кодирования, изучите Linux и настройте производительность. Помощь Docker/k8s, мониторинг, сбор логов, изучение промежуточного ПО. Front-end технология, back-end практика и т.д. Основная техника:SpringBoot+JPA+Mybatis-plus+Antd+Vue3.

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

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.