Механизм перебалансировки Kafka Consumer - оригинальная ссылка
Механизм перебалансировки Kafka Consumer - оригинальная ссылка
Механизм перебалансировки Kafka Consumer - оригинальная ссылка
На прошлой неделе я участвовал в техническом обмене Kafka Meetup Beijing Station.Эта статья кратко знакомит с механизмом перебалансировки Kafka Consumer и стратегией оптимизации в ее новой версии~
Группы потребителей в версиях до Кафки
Consumer Group
Как показано на фиг.Consumer
использоватьConsumer Group
сами теги имен, и каждая запись, опубликованная в теме, доставляется одному из них в каждой подписавшейся группе потребителей.Consumer
пример.Consumer
Экземпляры могут находиться в отдельных процессах или на отдельных машинах.
я упалConsumer
экземпляры принадлежат одномуConsumer Group
, то этиConsumer
Экземпляры будут потребляться таким образом, чтобы они были сбалансированы и перезагружены.Kafka
.
я упалConsumer
экземпляры имеют разныеConsumer Group
, каждая запись будет транслироваться всемConsumer
процесс.
Group Coordinator
Group Coordinator
это услуга, каждыйBroker
Эта служба запускается при запуске.Group Coordinator
используется для храненияGroup
относится кMeta
информацию и будет соответствоватьPartition
изOffset
информация регистрируется вKafka
встроенныйTopic(__consumer_offsets)
середина.Kafka
До 0.9 он был основан наZookeeper
хранитьPartition
изOffset
Информация(consumers/{group}/offsets/{topic}/{partition})
,так какZookeeper
Не подходит для частых операций записи, поэтому после 0.9 через встроенныйTopic
способ записать соответствующийPartition
изOffset
. Как показано ниже:
существуетKafka 0.8.2
Так было раньше
После этого это выглядит так:
каждыйGroup
выберет одинCoordinator
для завершения каждого изPartition
изOffset
сведения, правила выбора следующие:
- рассчитать
Group
соответствует__consumer_offsets
ВверхPartition
- Найдите Брокера, соответствующего лидеру Раздела по соответствующему Разделу.Координатор группы на Брокере является координатором группы
Правила расчета перегородки:
partition-Id(__consumer_offsets) = Math.abs(groupId.hashCode() % groupMetadataTopicPartitionCount)
вgroupMetadataTopicPartitionCount
соответствоватьoffsets.topic.num.partitions
значение параметра, значение по умолчанию — 50 разделов
Consumer Rebalance Protocol
Когда ребалансировать
- Меняется количество участников группы. например есть новые
consumer
Экземпляр присоединяется к группе потребителей или покидает группу. - подписался
Topic
Номер меняется. - подписка
Topic
Количество разделов изменилось.
Когда потребительский процесс зависает
-
session
Истекший -
heartbeat
Истекший
Rebalance
когда это происходит,Group
все подConsumer
Экземпляры будут координироваться для совместного участия,Kafka
Для обеспечения максимально справедливого распределения. ноRebalance
пара процессовConsumer Group
будет иметь более серьезные последствия. существуетRebalance
в процессеConsumer Group
Все потребительские экземпляры перестанут работать, ожидаяRebalance
Процесс завершен.
Протокол перебалансировки потребителя
Процесс выполнения после перебалансировки
1. Есть новыеConsumer
ПрисоединяйсяConsumer Group
2, изConsumer Group
избиратьleader
3,leader
Выделить разделы
Issues
Known Issue #1: Stop-the-world Rebalance
Как показано выше: предыдущая версияKafka
это происходитRebalance
выпуститConsumer Group
всех ресурсов, что приводит к относительно длительномуStop-the-world
Known Issue #2: Back-and-forth Rebalance
Как показано на рисунке выше: когдаRebalance
Ненужное высвобождение и перераспределение ресурсов, которое происходит, когда
Сравнение текущего ребаланса и улучшенного ребаланса
Протокол прогрессивной перебалансировки
Как показано на рисунке выше, новый протокол прогрессивной перебалансировки не требует, чтобы все текущие потребители освобождали ресурсы, которыми они владеют, во время перебалансировки, но регистрирует текущие ресурсы, когда необходимо запустить перебалансировку, а затем выполняет прогрессивную перебалансировку. Эффект оптимизации от этого- По сравнению с предыдущей ребалансировкой было выполнено больше ребалансировок, но потребление ресурсов при каждой ребалансировке относительно низкое.
- Переносится меньше разделов, чем раньше
- Потребитель может продолжать работать во время перебалансировки
Справочная статья
- Incremental Cooperative Rebalancing in Apache Kafka: Why Stop the World When You Can Change It?
- KIP-429: Kafka Consumer Incremental Rebalance Protocol
- Incremental Cooperative Rebalancing: Support and Policies