[Столбец Kafka 05] Полный жизненный цикл сообщения: как Kafka обеспечивает последовательное использование сообщений?
[Столбец Kafka 05] Полный жизненный цикл сообщения: как Kafka обеспечивает последовательное использование сообщений?

Каталог статей
  • Полный жизненный цикл сообщения: как Kafka обеспечивает последовательное использование сообщений?
    • 01 Введение
    • 02 Механизм разделения Кафки
      • 2.1 Сообщения в разделе упорядочены
      • 2.2 Связь между количеством разделов и количеством потребителей
        • 1. Соответствие между разделами и потребителями
        • 2. Запланируйте количество разделов и потребителей
        • 3. Динамически корректируйте количество потребителей
        • 4. Используйте подходящую стратегию разделения.
    • 03 Настройка и использование групп потребителей
      • 3.1 Балансировка нагрузки
        • 1. Стратегия распределения разделов
        • 2. Реализация балансировки нагрузки
      • 3.2 Широковещательная рассылка сообщений и одноточечное потребление
        • 1. Группы потребителей и вещание
        • 2. Одноточечное потребление и последовательность сообщений
        • 3. Конфигурация группы потребителей
    • 04 Стратегия разделения производителей
      • 4.1 Разделение хеша на основе ключей
      • 4.2 Пользовательский разделитель
    • 05 Резюме

Полный жизненный цикл сообщения: как Kafka обеспечивает последовательное использование сообщений?

01 Введение

В области обработки больших данных и потоковой обработки в реальном времени Apache Kafka стала широко используемой в отрасли распределенной системой очередей сообщений благодаря своей высокой производительности, высокой пропускной способности и масштабируемости. Однако во многих сценариях приложений порядок сообщений часто является решающим требованием. Будь то финансовые транзакции, ведение журналов или другие бизнес-сценарии, требующие точных сроков, последовательное потребление сообщений особенно важно.

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

02 Механизм разделения Кафки

Основой Kafka для обеспечения последовательного потребления сообщений является механизм секционирования. В Kafka тема (Topic) может быть разделена на несколько разделов, каждый раздел представляет собой независимую, упорядоченную, неизменяемую последовательность сообщений. Это означает, что как только сообщение записывается в раздел, оно добавляется в конец этого раздела, сохраняя его порядок. Такая конструкция позволяет Kafka обеспечивать упорядоченное использование сообщений в распределенной среде.

2.1 Сообщения в разделе упорядочены

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

  1. Механизм секционирования в Kafka является основой обеспечения последовательного потребления сообщений. Фактически каждый раздел можно рассматривать как независимый, упорядоченный и неизменяемый файл журнала в Kafka. Такая конструкция гарантирует, что сообщения сохраняют первоначальный порядок при написании и чтении.
  2. В частности, когда производитель отправляет сообщения в Kafka, эти сообщения добавляются в указанный раздел. Этот процесс является последовательным, то есть сообщение, отправленное первым, будет добавлено в начало раздела, а сообщение, отправленное позже, будет добавлено в конец раздела. Таким образом, сообщения внутри раздела образуют упорядоченную последовательность.
  3. Со стороны потребителя, когда потребитель читает сообщения из Kafka, он читает сообщения в том порядке, в котором они находятся в разделах. Потребительский API Kafka гарантирует, что в одном разделе потребители будут читать сообщения в том порядке, в котором они были отправлены. Это означает, что если производитель отправляет сообщения в раздел в определенном порядке, потребитель будет читать эти сообщения в том же порядке.
  4. Следовательно, пока потребитель может читать сообщения в разделе по порядку, порядок сообщений может быть гарантирован. Этот механизм позволяет Kafka обеспечивать надежную поддержку при работе с бизнес-сценариями, требующими поддержания порядка сообщений. В то же время, благодаря механизму разделения Кафки, даже в распределенной среде, может добиться последовательного потребления сообщений.
  5. Следует отметить, что хотя Kafka может гарантировать порядок сообщений внутри одного раздела, он не может гарантировать порядок сообщений в разделах. Если требуется упорядочивание сообщений между разделами, этого может потребоваться с помощью других механизмов (например, отправки связанных сообщений в один и тот же раздел с использованием одного и того же ключа).
2.2 Связь между количеством разделов и количеством потребителей

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

1. Соответствие между разделами и потребителями
  • Группа потребителей Kafka позволяет группе экземпляров потребителей совместно использовать одну или несколько тем. Однако при упорядочивании сообщений внутри разделов важно гарантировать, что каждый раздел используется только одним экземпляром потребителя.
  • Когда количество экземпляров потребителей в группе потребителей меньше или равно количеству. разделов измерять время,Kafka постарается гарантировать, что каждый экземпляр потребителя использует независимый раздел.,Это позволяет избежать путаницы в порядке сообщений, вызванной одновременным использованием.
2. Запланируйте количество разделов и потребителей
  • При проектировании системы Kafka требуется правильное планирование. разделови Количество потребителей。если Количество потребителейизлишний,Может привести к одновременному использованию одного и того же раздела несколькими экземплярами-потребителями.,Тем самым разрушая порядок сообщений.
  • С другой стороны, если Количество потребителей Слишком мало,Может привести к перегрузке некоторых экземпляров потребителей.,пока другие бездействуют,Это влияет на общую производительность и пропускную способность системы.
  • Поэтому обычно рекомендуется потребителей По крайней мере с Количество разделов равные,Или немного больше (но не слишком много),Чтобы обеспечить равномерное использование каждого раздела,В то же время избегайте проблем с заказами, вызванных одновременным потреблением.
3. Динамически корректируйте количество потребителей
  • В практических приложениях Количество Потребители могут меняться в зависимости от потребностей бизнеса, загрузки системы и других факторов. Таким образом, Kafka обеспечивает динамическую настройку. потребителеймеханизм。
  • Когда изменяется количество потребителей,Kafka перераспределит разделы между потребительскими экземплярами,Чтобы гарантировать, что каждый раздел по-прежнему используется только одним потребителем. Этот процесс динамической регулировки является автоматическим.,И постараюсь сохранить порядок сообщений.
4. Используйте подходящую стратегию разделения.
  • В дополнение к контролю количества потребителейснаружи,Вы также можете обеспечить порядок сообщений. Например,Если бизнес-логика требует, чтобы определенные связанные сообщения обрабатывались в определенном порядке.,Затем эти сообщения можно отправить в тот же раздел.
  • Kafka предоставляет разработчикам на выбор различные стратегии секционирования.,В том числе Разделение хеша на основе ключей, Пользовательский разделитель и т. д. Выбрав подходящую стратегию разделения,Гарантию порядка сообщений можно улучшить.

03 Настройка и использование групп потребителей

Механизм Consumer Group Kafka также является важной частью обеспечения последовательного потребления сообщений. Группы потребителей позволяют группе потребителей совместно использовать тему, обеспечивая при этом балансировку нагрузки и отказоустойчивость.

3.1 Балансировка нагрузки

Балансировка нагрузки достигается путем назначения разделов темы различным экземплярам потребителей в группе потребителей. Kafka выделяет разделы экземплярам потребителей на основе идентификатора группы потребителей и списка подписанных тем. Эта стратегия распределения может быть RoundRobin (опрос) или Range (диапазон), гарантируя, что каждому экземпляру потребителя необходимо обрабатывать сообщения только из части раздела, тем самым улучшая общую производительность потребления.

1. Стратегия распределения разделов
  • Kafka предлагает разнообразные стратегии распределения разделов,Включает раунд-робин (опрос) и Диапазон и т.д. Эти политики определяют, как разделы назначаются экземплярам потребителей в группе потребителей.
  • RoundRobin (опрос):Эта стратегия равномерно распределяет разделы между экземплярами потребителей в группе потребителей.。Конкретно,Kafka выведет список всех разделов и экземпляров потребителей.,Затем отсортируйте в соответствии с некоторым порядком (например, хэш-кодом).,Наконец, разделы выделяются каждому экземпляру потребителя с помощью алгоритма опроса. Преимущество этой стратегии в том, что она проста и эффективна.,Применимо к ситуациям, когда потребительские экземпляры имеют одинаковые возможности обработки.
  • Диапазон:Эта стратегия сортирует разделы в соответствии с их порядком внутри темы.,И назначьте соседние разделы различным экземплярам потребителей. Когда новый экземпляр потребителя присоединяется к группе потребителей,Он будет выделен наименьшему разделу, который еще не был выделен. Преимущество этой стратегии заключается в том, что ее можно динамически настраивать в зависимости от размера раздела и вычислительной мощности экземпляра-потребителя.,выполнитьбалансировка нагрузки。но,Это может привести к большему перемещению разделов.,Увеличение нагрузки на сеть и задержки.
2. Реализация балансировки нагрузки
  • Kafka выделяет разделы экземплярам потребителей на основе идентификатора группы потребителей и списка подписанных тем. В частности, когда экземпляр потребителя присоединяется к группе потребителей, он отправляет запрос на присоединение в кластер Kafka и объявляет группу потребителей, к которой он принадлежит, и темы, которые его интересуют.
  • Координатор Kafka (Координатор) отвечает за координацию и управление экземплярами потребителей в группе потребителей. в основе будет Стратегия распределения разделов,Выделить экземпляр потребителя для каждого раздела,И поддерживайте отношения сопоставления между потребительскими экземплярами и разделами.
  • После завершения выделения раздела каждый экземпляр потребителя будет отвечать за получение сообщений в разделе, которому он назначен. Поскольку каждый раздел будет использоваться только одним экземпляром потребителя, можно добиться последовательного потребления сообщений.
  • При изменении количества экземпляров потребителей в группе потребителей (например, при добавлении или удалении экземпляров потребителей).,Kafka запустит процесс перебалансировки разделов (Rebalance). в этом процессе,Координатор пересчитывает назначения разделов,И обновите отношения сопоставления между потребительскими экземплярами и разделами.,Чтобы гарантировать, что новые потребительские экземпляры смогут равномерно нести потребительскую нагрузку.,Таким образом реализовывая балансировку нагрузки.
3.2 Широковещательная рассылка сообщений и одноточечное потребление

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

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

1. Группы потребителей и вещание
  • Группы потребителей действительно могут добиться эффекта вещания сообщений. Когда несколько групп потребителей подписываются на одну и ту же тему, каждая группа потребителей будет получать все сообщения из этой темы. Это похоже на традиционную модель публикации-подписки, где каждый подписчик получает все сообщения от издателя.
2. Одноточечное потребление и последовательность сообщений
  • Однако,В сценариях, где необходимо обеспечить порядок сообщений,Мы предпочитаем потребление по меню.,То есть каждый раздел используется только одним экземпляром потребителя. Это связано с тем, что Kafka гарантирует порядок сообщений внутри одного раздела.,Вместо упорядочивания сообщений по разделам.
  • Чтобы обеспечить порядок сообщений, нам необходимо убедиться, что каждый раздел используется только одним экземпляром потребителя. Таким образом, экземпляр-потребитель может получать сообщения в том порядке, в котором они находятся в разделе, обеспечивая таким образом порядок сообщений.
3. Конфигурация группы потребителей

При настройке группы потребителей, чтобы гарантировать, что каждый раздел будет назначен только одному экземпляру потребителя, нам необходимо учитывать следующие факторы:

  • Количество разделов:первый,Нам нужно по объёму данных темыи Вычислительные мощности потребителей для надлежащего планирования Количество разделов。если Количество Слишком малое количество разделов может привести к перегрузке некоторых потребительских экземпляров; Слишком большое количество разделов может привести к пустой трате ресурсов.
  • Количество потребителей:Во-вторых,Нам необходимо убедиться, что количество экземпляров потребителей в группе потребителей соответствует Количество разделов совпадений. В идеале, количество потребители должны быть равны или немного больше, чем Количество. разделов, чтобы гарантировать, что каждый раздел может быть назначен экземпляру-потребителю.
  • Стратегия распределения разделов:Kafka предлагает разнообразные стратегии распределения разделов,Такие как RoundRobin (опрос) и Диапазон и т.д. В сценариях, где необходимо гарантировать последовательность сообщений, мы обычно выбираем стратегию по умолчанию. распределения разделов, то есть пусть Kafka автоматически выделяет нам разделы.

04 Стратегия разделения производителей

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

4.1 Разделение хеша на основе ключей

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

4.2 Пользовательский разделитель

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

05 Резюме

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

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

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

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.