Оригинал: 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.
Через следующие три строки команд можно запустить автономный брокер без участия 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.
Это так просто.
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, добро пожаловать в друзья для дальнейшего общения.