Понимание тем и разделов Кафки

Я начинаю изучать Кафку для корпоративных целей решения.

во время моих чтений, некоторые вопросы пришли мне на ум:

  1. когда производитель создает сообщение - он укажет темы он хочет отправить сообщение, верно? Это волнует разделы?
  2. когда работает подписчик-указывает ли он свой идентификатор группы, чтобы он мог быть частью кластера потребителей одной и той же темы или нескольких тем, которые эта группа потребителей заинтересована?
  3. У каждой группы потребителей есть соответствующий раздел на брокере или у каждого потребителя есть один?

  4. Как разделы, созданные брокером, поэтому не заботятся о потребителях?

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

  6. Что происходит, когда сообщение удаляется из очереди? Например: удержание было в течение 3 часов, затем проходит время, как смещение обрабатывается с обеих сторон?

3 ответов


давайте по порядку:)

1-когда производитель создает сообщение-он укажет тему, в которую он хочет отправить сообщение, верно? Это волнует разделы?

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


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

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


3 - У каждой группы потребителей есть соответствующий раздел на брокера или у каждого потребителя есть?

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


4 - разделы, созданные брокером, поэтому не являются проблемой для потребителей?

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


5-поскольку это очередь со смещением для каждого раздела, несет ли ответственность потребитель указать, какие сообщения он хочет прочитать? Нужно ли ему сохранять свое состояние?

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


6 - Что происходит, когда сообщение удаляется из очереди? - Например: удержание было в течение 3 часов, затем проходит время, как смещение обрабатывается с обеих сторон?

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


в этом посте уже есть принятый ответ, но я добавляю свой взгляд с несколькими фотографиями из Kafka Definitive Guide

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

overview of producer components

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

производитель решит целевой Раздел для размещения любого сообщения зависит от

  • идентификатор раздела, если он указан с сообщением
  • ключ % num разделы, если идентификатор раздела не указан
  • раунд Робин, если ни ID раздела, ни клавишу сообщения доступно в сообщении, означает только значение

2. Когда работает подписчик - Указывает ли он свой идентификатор группы, чтобы он мог быть частью кластера потребителей одной и той же темы или нескольких тем, которые интересуют эту группу потребителей?

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

3. Каждая группа потребителей имеет соответствующий раздел брокера или у каждого потребителя есть?

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

  • количество потребителей меньше количество разделов темы, то несколько разделов могут быть назначены одному из потребителей в группе number of consumers less than topic partitions
  • количество потребителей то же самое как темы разделов, то раздел и потребительское отображение может быть как показано ниже, number of consumers same as number of topic partitions
  • количество потребителей больше, чем количество разделов темы, затем отображение разделов и потребителей может быть как показано ниже,не эффективно, проверьте потребитель 5 number of consumers more than number of topic partitions

4. Как разделы, созданные брокером, поэтому не заботятся о потребителях?

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

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

Кафка заботится о смещении состояния internallay, создавая сообщение для специального __consumer _ offsets тема, это поведение может быть настроено вручную также по enable.auto.commit до false. В таком случае ...--2--> и consumer.commitAsync() может быть полезно для управления смещением.

6. Что происходит, когда сообщение удаляется из очереди? Например: удержание было в течение 3 часов, затем проходит время, как смещение обрабатывается с обеих сторон?

если любой потребитель начинает после периода хранения, то сообщения будут уничтожены согласно auto.offset.reset конфигурация, которая может быть latest/earliest. технически это latest(начать обработку новых сообщений), потому что все сообщения получили истек к тому времени и удержание конфигурация уровня темы.


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

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

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

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

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

разделы темы распределяются по брокерам в кластере Кафка, где каждый брокер обрабатывает данные и запросы на долю разделов.

каждый раздел реплицируется через настраиваемое количество брокеров для обеспечения отказоустойчивости.

хорошо описано в этой статье : http://codeflex.co/what-is-apache-kafka/