Подробный анализ 6 классических сценариев использования очередей сообщений и принципов проектирования архитектуры Kafka.
Подробный анализ 6 классических сценариев использования очередей сообщений и принципов проектирования архитектуры Kafka.

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

Apache Kafka — это высокопроизводительная распределенная платформа обработки потоков, которая широко используется в конвейерах данных в реальном времени и приложениях потоковой обработки.

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

1. Какова функция очереди сообщений?

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

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

Ма Лу: «Почему вышестоящая система не отправляет сообщения напрямую в нижестоящую систему? Зачем нам нужен посредник?»

Это начинается с основной роли очереди сообщений.

Асинхронная обработка

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

Как показано на рисунке ниже, Аду пригласили на отдых и в оздоровительный спа-центр. В услугу входило замачивание ног, массаж, употребление фруктов и просмотр телевизора.

Системе SPA необходимо только убедиться, что на членской карте Ah Dou есть деньги, прежде чем она сможет предоставлять услуги. Если каждый шаг будет выполняться последовательно, качество обслуживания будет слишком плохим. Вы можете делать это одновременно, и вы будете в два раза счастливее. Замачивая ноги и делая массаж, вы можете одновременно есть фрукты и смотреть телевизор, что значительно улучшает ваши впечатления.

Разделение приложений

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

Этот асинхронный метод снижает степень связи между сервисами. В противном случае Ма Лу, который поддерживает систему заказов, будет плакать до смерти. После размещения заказа вызываются несколько нижестоящих систем. Некоторые системы должны требовать механизм повтора при вызове через интерфейс. . потерянный.

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

Ограничение пикового трафика

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

Например, обычный трафик определенного интерфейса составляет всего 100 TPS, но в определенные моменты он возрастает до 4000 TPS. Вообще говоря, MySQL может обрабатывать 2000 запросов в секунду, а 4000 запросов в секунду могут привести к сбою MySQL.

Вы можете использовать очередь сообщенийвыполнять Ограничение пикового трафика, чтобы предотвратить MySQL Сухой взрыв, введение MQ После этого сначала сохраните запрос в MQ , MySQL Обрабатывайте запросы медленно.

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

Тема Kafka может быть разделена на несколько разделов. Каждый раздел похож на очередь. Один раздел может обеспечить порядок данных.

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

тот же самый Consumer Group вниз Consumer Одновременное потребление Paritition,Необходимо обратить внимание на,если Consumer Group вниз Consumer Число превышает Partition количество, то будут простаивать Consumer。

Заказ гарантирован

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

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

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

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

Для заказа сообщений и бизнес-требований он также разделен на Глобально заказаноиместный заказ.

  • Глобально заказано: один Topic downВсе сообщения должны быть обработаны в порядке их вывода.
  • местный заказ: один Topic плохие новости, просто нужно встретиться такой же сферы бизнеса должны потребляться в порядке производства. Например: Тема Сообщение представляет собой блок-схему заказов, включая заказы orderId, бизнес-требованиетот же самый orderId Сообщения должны потребляться в порядке производства.
Глобально заказано

Kafka один из Topic Можно разделить на несколько Partition,Producer При отправке сообщения Кафка встречаиспользоватьбалансировка стратегия нагрузки Сообщение Воля отправлено одному из Разделение приведет к тому, что порядок будет испорчен.

Чтобы гарантировать, что Глобально заказано, то Topic Там может быть только один Partition。И соответствующийиз Consumer Также используйте один поток или модель потока, гарантирующую порядок потребления.

местный заказ

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

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

отказоустойчивость

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

2. Основные компоненты Kafka

Наконец появляется сегодняшний главный герой, изображенный прямо выше.

Основная архитектура Kafka состоит из следующих основных компонентов:

  1. Продюсер:Отправить сообщениеизс другой стороны,Отвечает за публикацию сообщений в Kafka Тема.
  2. Потребитель:принять сообщениеизс другой стороны,Подписывайтесь на темы и обрабатывайте сообщения.
  3. Маклер:узел сервисного агента,Kafka Сервер в кластере – это брокер, вы можете иметь неограниченное количество уровней Расширять, тот же самый Topic Сообщения могут быть распределены по нескольким broker середина.
  4. Тема:Kafka Сообщение в Topic Разделенные на подразделения, сообщения производителя Воля отправляются конкретным из Тема, и потребитель несет ответственность за подписку. Topic сообщения и потреблять их.
  5. Раздел:темаиз Физическое шардинг,Улучшены возможности параллельной обработки.
  6. Реплика:копировать,да Kafka Способ обеспечить высокую доступность данных, Kafka такой же Partition Данные могут быть во многих Broker На компьютере имеется несколько копий. Обычно только основная копия обеспечивает услуги чтения и записи для внешнего мира. broker Сбой или сбой сети, Кафка будет внутри Controller Новый будет выбран под руководством Leader Реплика предоставляет внешние службы чтения и записи.
  7. ZooKeeper:управлять Kafka Кластер метаданных и Распределенная координация。

3. Тема и раздел

Давайте посмотрим, что такое тема и раздел.

3.1 Тема

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

3.2 Раздел

Чтобы улучшить возможности параллельной обработки и масштабируемость, Kafka делит тему на несколько разделов.

каждый Partition это упорядоченная очередь сообщений, сообщения находятся в Partition внутренне упорядочен, но по-разному Partition Нет заказа между гарантирован。

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

3.3 Реплика

каждый Partition Реплик может быть несколько (Replica), распределенных по разным Broker начальство.

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

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

Как показано на рисунке ниже, желтый цвет представляет лидера, а серый — последователя. Тема разделена на три Патиции, количество копий - 2.

4. Потребитель и ConsumerGroup

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

5. Механизм хранения данных

Механизм хранения данных Kafka использует последовательную запись на диск для повышения производительности записи.

каждый Partition сообщения хранятся в нескольких Сегментировать файлсередина,каждый Segment Файл состоит из непрерывного набора сообщений. Сегмент Файлы управляются с помощью индексов и файлов журналов. В индексном файле записывается смещение каждого сообщения в файле журнала.

Механизм хранения Кафки имеет следующие характеристики:

  1. последовательная запись:Kafka проходитьпоследовательная запись для улучшения скорости записи и использования диска.
  2. Сегментировать файл:Сообщения хранятся в сегментах.,Легко управлять и чистить.
  3. Механизм индексации:Быстро находите сообщения посредством индексации,Повышайте эффективность чтения.
  4. Стратегия очистки журналов:Поддержка по временииразмериз Стратегия очистки журналов, обеспечивая эффективное использование складских помещений.

6. Механизм высокой доступности и отказоустойчивости.

Kafka Высота достигается за счет следующих типов механизмов. доступностьсексиотказоустойчивость:

  1. механизм копирования:каждый Partition Существует несколько копий. Основная копия (Leader) отвечает за операции чтения и записи, а другие копии (Follower) периодически следуют за ней. Leader Синхронизировать данные. когда Leader При возникновении сбоя, Follower избрать нового Leader。
  2. Механизм подтверждения:Producer При отправке сообщения вы можете установить ACK чтобы убедиться, что сообщение успешно написано Leader и Follower, чтобы гарантировать, что данные не будут потеряны.
  3. Механизм ISR (синхронная реплика):Kafka поддерживать ISR Список, записывает текущие и Leader Сохраните синхронизированную копию. только в ISR Участвуют только копии из списка. Leader выборы.
  4. Координация ZooKeeper:Kafka использовать ZooKeeper руководить Распределенная координация, управление метаданными и статусом кластера. смотритель зоопарка Ответственный за управление Broker Информация о регистрации, Тема и Partition метаданные и Leader Выборы и т. д.

7. Гарантия доставки сообщений

Kafka предоставляет три гарантии доставки сообщений:

  1. At most once:Сообщения доставляются не более одного раза,Может быть потеряно.
  2. At least once:Сообщение доставляется хотя бы один раз,Возможный дубликат.
  3. Exactly once:Сообщение доставлено ровно один раз,Kafka существовать 0.11.0.0 В этой версии представлен механизм транзакций для поддержки сквозной семантики «точный один раз».

8. Роль смотрителя зоопарка

Kafka Воля Broker、Topic и Partition Информация метаданных хранится в Zookeeper начальство.проходитьсуществовать Zookeeper Установите соответствующие узлы данных в Kafka и отслеживайте изменения узлов. использовать Zookeeper Выполните следующие функции:

  1. Управление метаданными:хранилище Kafka метаданные, включая Broker Список, Тема и Partition Информация, ИСР Список и т. д.
  2. Распределенная координация:Ответственный Broker из РегистрацияиDiscover, Лидер выборы、балансировка нагрузкиждать。
  3. мониторинг состояния:монитор Kafka кластериз Текущий статус,гарантироватьсистемаизпоследовательныйсекси Высокая доступностьсекс。
  • Регистрация брокера. Брокеры развертываются распределенным образом и независимы друг от друга. Zookeeper используется для управления всеми узлами брокера, зарегистрированными в кластере.
  • Topic зарегистрироваться:существовать Kafka середина,тот же самый Topic из Сообщения будут разделены на несколько разделов и распределены по нескольким Broker выше,эта информация о разделах и Broker Соответствующие отношения также состоят из Zookeeper существовать维护
  • 生产者балансировка нагрузки:потому чтотот же самый Topic Сообщения секционируются и распределяются по нескольким Broker Следовательно, производителям необходимо разумно отправлять сообщения этим распределенным Broker начальство.
  • потребительбалансировка нагрузка: Аналогично производителям Kafka Китайским потребителям также необходимо провести балансировку нагрузка на разумное достижение нескольких потребителей из соответствующего из Broker Получайте сообщения на сервере. Группа потребителей содержит несколько потребителей. Каждое сообщение будет отправлено только группе. Из потребителей, различные группы потребителей потребляют свои собственные специфические Topic Следующие сообщения не мешают друг другу.

8. Масштабируемость Кафки

Масштабируемость Kafka в основном отражается в следующих аспектах:

  1. Горизонтальное расширение:проходить Увеличивать Broker узлов и может быть легко расширен Kafka Кластер возможностей хранения и обработки.
  2. Расширение раздела:проходить Увеличивать Partition Количество можно увеличить Topic возможности параллельной обработки.
  3. Динамическая конфигурация:Kafka Поддержка динамической настройки некоторых конфигураций во время выполнения, например Topic из Количество разделов и Коэффициент репликации и т.д.

Профиль блоггера

Код Брат, 9 Многолетний опыт back-end работы в интернет-компаниях, InfoQ Контрактный автор, 51CTO Top Знаменитость, блоггер-эксперт в сообществе разработчиков Alibaba Cloud, в настоящее время работает серверным архитектором и специализируется на Redis、Spring、Kafka、MySQL технологияи Облачные микросервисы。

Если тебе нравится из, можешь обратить на меня внимание на,ХОРОШОсуществовать Официальный ответ серверной части аккаунта“материал”Загрузите мой оригинал 300 Многостраничный «Redis Ум мастера».

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода