Имя автора:От лета до холода
Об авторе: Сосредоточьтесь на Java и больших данных, стремимся исследовать границы технологий и делиться передовыми практиками и идеями.
Колонка статей: Колонка Ся Чжиихань-Кафка
Введение в колонку: цель этой колонки — представить основные концепции, основные компоненты и сценарии использования Kafka в простой для понимания форме, а также шаг за шагом построить систему знаний об очередях сообщений и потоковой обработке, независимо от того, интересуетесь ли вы распределенными системы или подготовка к работе с ними. Делая первый шаг в области больших данных, в этой колонке представлены все необходимые ресурсы, рекомендации и вопросы для собеседований. Подпишитесь бесплатно прямо сейчас и начните свой путь обучения Kafka!
Вихрь ребалансировки: как потребители Kafka избегают проблем с ребалансировкой
01 Введение
Ребалансировка в Kafka — это важный механизм в группе потребителей. Он относится к процессу перераспределения разделов тем между экземплярами потребителей. В кластере Kafka функция Rebalance предназначена для обеспечения равномерного потребления данных группой потребителей. Однако этот процесс может вызвать ненужные триггеры в определенных сценариях, таких как добавление или удаление экземпляров потребителей, изменение количества тем или разделов или даже колебания сети. Частая перебалансировка значительно увеличит накладные расходы группы потребителей и повлияет на общую производительность и стабильность. Поэтому в этой статье будут глубоко изучены и проанализированы потенциальные причины ребалансировки, а также предложен ряд эффективных стратегий оптимизации, которые помогут разработчикам и администраторам избежать ненужной ребалансировки, тем самым улучшая производительность и надежность групп потребителей Kafka.
02 Причины ребалансировки
2.1 Изменение количества членов потребительской группы
1. Присоединяются новые участники
- Когда запускается новый экземпляр потребителя и пытается присоединиться к существующей группе потребителей.,это будетKafkaКластер отправляет
JoinGroup
просить。 - Координатор Kafka (Координатор) обработает этот запрос и инициирует перебалансировку, чтобы гарантировать, что новый экземпляр потребителя будет назначен одному или нескольким разделам для использования.
- Во время перебалансировки все потребители в группе потребителей приостанавливают потребление и ждут завершения выделения нового раздела.
2. Участники добровольно покидают группу
- Если экземпляр потребителя по какой-либо причине решает активно покинуть группу потребителей (например, перезапуск или выход приложения),это будетKafkaотправить
LeaveGroup
просить。 - Аналогичным образом координатор обработает запрос и инициирует ребалансировку.
3. Участники теряют сознание и покидают группу.
- в некоторых случаях,Потребительские экземпляры могут быть не в состоянии поддерживать контрольное соединение с кластером Kafka из-за проблем с сетью, сбоев процессов или по другим причинам.
- Координатор Kafka регулярно отслеживает пульс потребительских экземпляров.,Как только потребитель превысит установленный
session.timeout.ms
(Значение по умолчанию:10Второй)Сердцебиение не отправлено,Координатор посчитает потребителя разбившимся,и удалите его из группы потребителей. - После удаления поврежденного экземпляра потребителя координатор инициирует перебалансировку.
4. Перезапустите экземпляр потребителя.
- Если экземпляр потребителя перезапускается,он может забыть предыдущее
member id
,и отправить повторноJoinGroup
просить,таким образом ему присваивается новый случайныйmember id
。 - В результате получится оригинал
member id
Неверный,и быть удалено после тайм-аута контрольного сигнала,Это запускает еще один ребаланс.
5. Резюме
Изменение количества членов потребительской группы,Будь то активный или пассивный,Все это приведет к тому, что Kafka вызовет Rebalance. В целях поддержания стабильности потребительской группы и производительности,Следует избегать, насколько это возможно, ненужных случаев присоединения или ухода потребителей.,и разумный Конфигурацияsession.timeout.ms
параметры для уменьшениясеть Ошибочные суждения, вызванные колебаниями и другими причинами。
2.2 Изменение количества подписанных Тем или Разделов
1. Добавить новую тему
- Когда новые темы создаются и добавляются в список подписки группы потребителей, Kafka необходимо убедиться, что разделы этих новых тем могут быть разумно распределены по экземплярам потребителей в группе потребителей.
- Это запускает перебалансировку, чтобы Kafka мог пересчитать и выделить разделы, за которые отвечает каждый экземпляр потребителя.
2. Добавить новый раздел.
- Если в существующую тему добавляется новый раздел, Kafka также необходимо обновить распределение разделов в группе потребителей.
- Подобно добавлению новой темы, это также вызовет перебалансировку, чтобы гарантировать, что вновь добавленный раздел будет назначен экземплярам потребителей в группе потребителей для достижения балансировки нагрузки.
3. Удалить тему или раздел.
- Хотя Ребаланс Кафки в основном на Для добавления темы или раздела,Но теоретически,Если тема или раздел, на который подписывается группа потребителей, удалена,Также может потребоваться инициировать перебалансировку для обновления информации о подписке потребителя и распределении разделов.
- Однако в реальной работе не принято напрямую удалять тему или раздел, на которые подписана группа потребителей, поскольку это может привести к потере данных или несогласованному статусу группы потребителей.
4. Стратегия перераспределения разделов
- В процессе ребалансировки Kafka решит, как распределить разделы по потребительским экземплярам на основе определенной стратегии перераспределения разделов.
- Эти стратегии могут включать в себя диапазон, циклический (опрос), липкий (sticky) и т. д. Каждая из них имеет свои преимущества и недостатки и подходит для разных сценариев.
5. Резюме
Изменения количества подписанных тем или разделов являются важной причиной запуска Kafka Rebalance. Независимо от того, добавляете ли вы новую тему, новый раздел или удаляете существующую тему или раздел, распределение разделов в группе потребителей может измениться, что вызовет перебалансировку. Чтобы избежать ненужной перебалансировки и поддерживать стабильность и производительность группы потребителей, количество тем и разделов следует разумно планировать и управлять ими.
2.3. Тайм-аут сеанса.
1. Механизм сердцебиения
- Kafka использует механизм Heartbeat для определения состояния работоспособности экземпляров-потребителей. Потребительский экземпляр периодически отправляет контрольные запросы координатору Kafka, чтобы доказать, что он все еще активен и находится в сети.
2. параметр session.timeout.ms
session.timeout.ms
это Конфигурацияпараметр,Он определяет отношения между потребителями иKafkaмежду кластерами Тайм-аут время сеанса. Этот параметр устанавливает максимальный интервал между отправкой контрольных сигналов потребителями.- По умолчанию,
session.timeout.ms
Значение10Второй。Это означает, что если потребитель не отправит подтверждение координатору в течение этого времени,Координатор будет считать потребителя «мертвым» или «отключенным». - производительность, основанная на реальных сценариях применения и примерах потребителей,Можно регулировать
session.timeout.ms
ценить。нравиться Если экземпляру потребителя необходимо обработать большой объем данныхилижитьсуществоватьвышеиз Задерживать,Это значение можно соответствующим образом увеличить, чтобы уменьшить ненужную ребалансировку. - но, пожалуйста, обратите внимание,слишком долго
session.timeout.ms
может скрыть реальную проблему(нравиться Потребительский экземпляр выходит из строяили Обработка идет медленно),Поэтому необходима тщательная регулировка.
3. Влияние тайм-аута пульса
- Когда экземпляр потребителя задерживается по какой-либо причине (например, сеть、Пауза GC、Время обработки слишком велико и т. д.)не удалось
session.timeout.ms
При отправке пульса в течение указанного времени,Координатор удалит его из группы потребителей. - Как только потребитель будет удален, Kafka запустит Rebalance для перераспределения разделов, первоначально ответственных за потребителя, среди других экземпляров потребителя.
4. Сотрудничество с другими параметрами
heartbeat.interval.ms
еще один, связанный с сердцебиениемизпараметр,Он определяет, как часто потребитель отправляет сигналы пульса.。Обычно рекомендуетсяheartbeat.interval.ms
установлен наsession.timeout.ms
около одной трети,Обеспечить своевременное определение состояния здоровья экземпляров-потребителей.
5. Резюме
Тайм-аут сеанса — это то, что запускает Kafka Rebalanceважная причина。посредством разумного Конфигурацияsession.timeout.ms
иheartbeat.interval.ms
ждатьпараметр,Это может уменьшить ненужную ребалансировку и улучшить стабильность группы потребителей и производительность. Однако,В практических приложениях необходимо учитывать и другие факторы (такие как производительность, сетевой статус экземпляра-потребителя и т. д.).,Обеспечить эффективную работу кластера Kafka.
2.4 Изменения конфигурации группы потребителей
1. Настройка параметров
- Некоторые ключевые параметры потребительской группы Kafka,нравиться
session.timeout.ms
(Тайм-аут время сеанса)、heartbeat.interval.ms
(интервал сердцебиения)иmax.poll.interval.ms
(Максимальный интервал, в течение которого потребители могут получать сообщения)ждать,Если происходят изменения,Это может косвенно привести к запуску Ребаланса. - Например,нравитьсяфрукты
session.timeout.ms
установить короче,Экземпляр-потребитель не может отправить контрольные сигналы в течение указанного времени из-за длительного времени обработки или по другим причинам.,Координатор посчитает, что потребитель потерял контакт,Это запускает Ребаланс. - Другой пример,нравитьсяфрукты
max.poll.interval.ms
Установить меньше,Время обработки потребителя после операции опроса слишком велико.,Превышает значение, установленное этим параметром,Это также может привести к ребалансировке.
2. Регулировка количества экземпляров потребителей
- Если количество экземпляров потребителей в группе потребителей изменится, например, при добавлении или удалении экземпляров потребителей, Kafka запустит Rebalance для перераспределения разделов.
- При добавлении нового экземпляра потребителя координатор добавит его в группу потребителей и пересчитает разделы, за которые должен отвечать каждый экземпляр потребителя.
- При удалении экземпляра-потребителя координатор удаляет его из группы потребителей и назначает разделы, за которые он отвечал, другим экземплярам-потребителям.
3. Смена подписанной темы или раздела.
- Перебалансировка также будет запущена, если тема или раздел, на который подписана группа потребителей, изменится (например, добавление, удаление или изменение количества разделов).
- Kafka необходимо гарантировать, что новые темы или разделы могут быть разумно распределены по экземплярам потребителей в группе потребителей для поддержания балансировки нагрузки.
4. краткое содержание
Изменения в конфигурации группы потребителей, особенно корректировки ключевых параметров, изменения количества экземпляров потребителей и изменения в подписанных темах или разделах, могут активировать механизм перебалансировки Kafka. Чтобы избежать ненужной перебалансировки и сохранить стабильность и производительность группы потребителей, эти конфигурации следует тщательно корректировать и гарантировать, что влияние на группу потребителей полностью оценено, прежде чем вносить изменения. В то же время вам также необходимо уделять внимание мониторингу рабочего состояния группы потребителей, чтобы своевременно обнаруживать и решать потенциальные проблемы.
03 Стратегии, позволяющие избежать ребаланса
3.1 Поддерживать стабильное членство в потребительской группе
1. Стабилизировать количество экземпляров потребителей
- Избегайте частого запуска и завершения работы:потребительский экземпляриз Частый запускипрекращениевызоветRebalance。поэтому,Данной ситуации следует избегать, насколько это возможно.,Например,Обеспечьте стабильность экземпляров потребителей за счет разумного планирования ресурсов и мощности.
- Используйте инструменты оркестрации контейнеров:нравитьсяфруктыиспользоватьKubernetesждать Инструменты оркестрации контейнеров,Возможна ли конфигурация соответствующих проверок работоспособности и стратегий автоматического восстановления.,Чтобы гарантировать, что экземпляр потребителя может автоматически перезапуститься в случае сбоя.,Вместо того, чтобы прекратить полностью.
2. Правильно настройте тайм-аут сеанса и интервал подтверждения.
- Корректирование
session.timeout.ms
:в соответствии спотребительский экземпляризвычислительная мощностьисетьситуация,Правильно настройте Тайм-аут сеансавремя。Например,Если экземпляру потребителя требуется много времени для обработки,можно увеличить соответствующим образомsession.timeout.ms
ценить,Чтобы избежать перебалансировки, вызванной тайм-аутом обработки. - Установите соответствующие
heartbeat.interval.ms
:Обычно рекомендуетсяинтервал сердцебиенияустановлен на Тайм-аут сеансавремяоколо одной трети,Обеспечить своевременное определение состояния здоровья экземпляров-потребителей.
3. Оптимизация производительности потребительского экземпляра
- Сократить время обработки:Оптимизация кода для потребительских экземпляров,Сократите время обработки одной операции опроса,Избегайте последовательных звонковpoll()извремяинтервал превышает
max.poll.interval.ms
。 - Асинхронная обработка:нравитьсяфрукты可能изразговаривать,Переместить логику обработки сообщений в асинхронные потоки для выполнения.,Чтобы потребительские экземпляры могли быстрее реагировать на новые запросы опроса.
4. Используйте режим диспетчера.
- Концентрированное потребление:Для динамичных потребностей Корректирование Количество потребителейизсцена(нравитьсяиспользоватьKubernetes HPA), вы можете добавить компонент Dispatcher для подключения к Kafka в качестве единственного потребителя. маклер. Затем другие экземпляры приложения подключаются к диспетчеру для косвенного получения сообщений. Это позволяет избежать прямой корректировки количества членов потребительской группы Kafka.
5. Резюме
Поддержание стабильности членов потребительской группы — одна из ключевых стратегий, позволяющая избежать ребалансировки в Kafka. Стабилизируя количество экземпляров потребителей, правильно настраивая тайм-ауты сеансов и интервалы подтверждения, оптимизируя производительность экземпляров потребителей и используя режим диспетчера, можно эффективно уменьшить ненужную повторную балансировку, а также повысить производительность и стабильность групп потребителей Kafka.
3.2 Мониторинг и управление темами и разделами
- Избегайте частых изменений:TopicиPartitionчастые изменения в(нравиться Новый、удалитьили Исправлять)вызоветRebalance,Поэтому его следует избегать, насколько это возможно.
- Правильно спланируйте количество перегородок:в соответствии спотребности бизнесаи Объем данных,Разумно планируйте количество тематических разделов. Слишком много разделов увеличивает случайный ввод-вывод и использование дескрипторов файлов.,Влияние производительности: слишком малое количество разделов может привести к перекосу данных и неравномерной загрузке потребителей.
- Используйте динамическое секционирование с осторожностью.:ХотяKafkaПоддержка динамического увеличения количества разделов.,Однако его следует использовать с осторожностью в производственной среде. Увеличение количества разделов вызовет ребалансировку.,и может привести к потере или несогласованности данных.
3.3 Настройка конфигурации группы потребителей
- оптимизация
session.timeout.ms
иmax.poll.interval.ms
:эти двоепараметрверноRebalanceоказывает существенное влияние на возникновение。в соответствии ссетьситуацияи Потребитель обрабатывает сообщенияизвремя,Установите значения этих двух параметров соответствующим образом. - Включить потребительские транзакции:нравитьсяфруктыпотребности бизнеса需要跨多个分区илиTopicатомарная операция,Вы можете рассмотреть возможность Vwitch потребительские транзакции。но, пожалуйста, обратите внимание,Включение транзакций увеличивает сложность ребалансировки.
3.4 Мониторинг и оповещение
- Отслеживайте событие Rebalance группы потребителей.:проходитьKafkaизмониторинструментили Настроитьмонитор Скрипт,Отслеживайте событие Rebalance группы потребителей., своевременно выявлять и устранять нештатные ситуации.
- Установить порог тревоги:дляRebalanceНастройки мероприятия разумныеиз Порог сигнализации,Когда событие ребалансировки превышает пороговое значение,Незамедлительно уведомите соответствующий персонал о необходимости обработки.
3.5 Грамотно справляйтесь с ребалансировкой
- выполнить
ConsumerRebalanceListener
:существоватьв потребительском кодевыполнитьConsumerRebalanceListener
интерфейс,так что вRebalance发生时执行Настроитьизлогика。Например,Вы можете приостановить получение и обработку сообщений, когда происходит ребалансировка.,Прежде чем продолжить, дождитесь завершения ребалансировки. - Обеспечить согласованность состояния:существоватьRebalanceпериод,Статус потребителя может измениться. поэтому,существоватьв потребительском коде需要Обеспечить согласованность состояние, чтобы избежать потери данных или дублирования обработки.
04 Резюме
В Кафке,Избежание проблем с ребалансировкой имеет решающее значение для поддержания стабильности и целостности вашей группы потребителей. первый,Членство в группе потребителей должно поддерживаться на стабильном уровне.,Избегайте частого добавления или удаления потребительских экземпляров. Во-вторых,Параметры разумной Конфигурация групп потребителей,нравитьсяsession.timeout.ms
、heartbeat.interval.ms
иmax.poll.interval.ms
,Чтобы гарантировать, что потребители могут своевременно отправлять контрольные сигналы и обрабатывать сообщения.,Избегайте ребалансировки из-за тайм-аута. также,Разумно планируйте количество тематических разделов,И корректируйте стратегию подписки групп потребителей в соответствии с потребностями бизнеса.,Обеспечить балансировку нагрузки между потребителями. наконец,Использование инструментов мониторинга и возможностей ведения журналов Kafka.,Быстро обнаруживайте и решайте потенциальные проблемы с ребалансировкой. Применяя эти стратегии вместе,Может значительно снизить частоту ребалансировки в группах потребителей Kafka.,Повышение стабильности и надежности системы.