Я Брат Ма, можешь называть меня красивым. Сегодня давайте поговорим о сценариях использования и основных принципах реализации архитектуры очереди сообщений Kafka, чтобы помочь вам полностью понять внутренние принципы работы и концепции дизайна Kafka. .
Apache Kafka — это высокопроизводительная распределенная платформа обработки потоков, которая широко используется в конвейерах данных в реальном времени и приложениях потоковой обработки.
Kafka стал важным компонентом в экосистеме больших данных благодаря своей высокой производительности, низкой задержке, масштабируемости и надежности.
очередь сообщениядавид межпроцессного общения или тот же Метод связи между различными потоками в самом процессе, в основном решающий проблему Асинхронности. обработка, связывание приложений, устранение пиков трафика, балансировка нагрузкии другие вопросы,Достижение высокой производительности, высокой доступности, масштабируемости и окончательной согласованности архитектуры.,Крупномасштабная распределенная система незаменима среди промежуточного программного обеспечения.
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 добавляет сообщения в конец раздела в том порядке, в котором они были отправлены.
Когда потребитель читает сообщения в разделе, он также читает их одно за другим в том порядке, в котором сообщения хранятся.
поэтому,существоватьтот же В самом разделе,Порядок сообщений строго гарантирован. Это очень важно для определенных бизнес-сценариев.,В частности, необходимо обеспечить последовательность и применение сообщений.,Например, финансовые операции, обработка заказов и т. д.
Для заказа сообщений и бизнес-требований он также разделен на Глобально заказаноиместный заказ.
Kafka один из Topic Можно разделить на несколько Partition,Producer При отправке сообщения Кафка встречаиспользоватьбалансировка стратегия нагрузки Сообщение Воля отправлено одному из Разделение приведет к тому, что порядок будет испорчен.
Чтобы гарантировать, что Глобально заказано, то Topic Там может быть только один Partition。И соответствующийиз Consumer Также используйте один поток или модель потока, гарантирующую порядок потребления.
Встретиться местный заказ, вам нужно лишь указать при отправке сообщения наличие Partition Key,Kafka сделай это Hash Посчитайте, по результатам расчета решите,какой из них поставить Раздел. так Partition Key такой жеизинформациявстречапомещатьсуществоватьтот же самый Перегородка для обеспечения порядка.
В настоящее время количество разделов по-прежнему можно установить на несколько, чтобы улучшить общую пропускную способность темы.
Kafka обеспечивает сохранение сообщений, механизм повторных попыток и механизм подтверждения, чтобы гарантировать, что сообщения не будут потеряны или обработаны повторно, а также повысить отказоустойчивость системы.
Наконец появляется сегодняшний главный герой, изображенный прямо выше.
Основная архитектура Kafka состоит из следующих основных компонентов:
Давайте посмотрим, что такое тема и раздел.
Тема — это логическая единица классификации данных в Kafka, которую можно понимать как очередь. Брокер — это машина, на которой развернуты все очереди, производитель отправляет сообщения в определенную тему, а потребитель потребляет сообщения из определенной темы.
Чтобы улучшить возможности параллельной обработки и масштабируемость, Kafka делит тему на несколько разделов.
каждый Partition это упорядоченная очередь сообщений, сообщения находятся в Partition внутренне упорядочен, но по-разному Partition Нет заказа между гарантирован。
Производители могут отправлять сообщения в разные разделы параллельно, а потребители также могут параллельно использовать разные разделы, тем самым улучшая общие возможности обработки.
каждый Partition Реплик может быть несколько (Replica), распределенных по разным Broker начальство.
Kafka выберет одну главную копию (лидер) для нескольких копий раздела. Основная копия предоставляет внешние службы чтения и записи, а подчиненная копия (ведомый) синхронизирует данные лидера в реальном времени.
Kafka обеспечивает высокую доступность благодаря механизму реплики. В случае сбоя брокера реплика может использоваться для обеспечения того, чтобы данные не были потеряны и услуги могли продолжать предоставляться.
Как показано на рисунке ниже, желтый цвет представляет лидера, а серый — последователя. Тема разделена на три Патиции, количество копий - 2.
Kafka Существует концепция группы потребителей. Потребители могут получать только сообщения, назначенные разделам. Каждый раздел может быть включен только в одну группу потребителей. из Потребление потребителями, т.е. же Если количество потребителей в группе потребителей превышает количество разделов, некоторые потребители не будут распределены по разделам потребления. Отношения между потребительскими группами и потребителями показаны на рисунке ниже:
Механизм хранения данных Kafka использует последовательную запись на диск для повышения производительности записи.
каждый Partition сообщения хранятся в нескольких Сегментировать файлсередина,каждый Segment Файл состоит из непрерывного набора сообщений. Сегмент Файлы управляются с помощью индексов и файлов журналов. В индексном файле записывается смещение каждого сообщения в файле журнала.
Механизм хранения Кафки имеет следующие характеристики:
Kafka Высота достигается за счет следующих типов механизмов. доступностьсексиотказоустойчивость:
Kafka предоставляет три гарантии доставки сообщений:
Kafka Воля Broker、Topic и Partition Информация метаданных хранится в Zookeeper начальство.проходитьсуществовать Zookeeper Установите соответствующие узлы данных в Kafka и отслеживайте изменения узлов. использовать Zookeeper Выполните следующие функции:
Масштабируемость Kafka в основном отражается в следующих аспектах:
Профиль блоггера
Код Брат, 9 Многолетний опыт back-end работы в интернет-компаниях, InfoQ Контрактный автор, 51CTO Top Знаменитость, блоггер-эксперт в сообществе разработчиков Alibaba Cloud, в настоящее время работает серверным архитектором и специализируется на Redis、Spring、Kafka、MySQL технологияи Облачные микросервисы。
Если тебе нравится из, можешь обратить на меня внимание на,ХОРОШОсуществовать Официальный ответ серверной части аккаунта“материал”Загрузите мой оригинал 300 Многостраничный «Redis Ум мастера».