Механизм перебалансировки 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