Как производитель Apache Kafka отправляет записи в разделы параллельно? - PullRequest
0 голосов
/ 26 октября 2018

Из API-документа Kafka я нашел описание метода send () в Apache Kafka ( API-документ производителя ):

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

Мне просто интересно, как записи отправляются параллельно? Если у меня есть 3 брокера и на каждом брокере с 3 разделами по одной теме, будет ли производитель Kafka отправлять записи в 9 разделов параллельно? Или продюсер просто отправляет записи 3 брокерам параллельно? Как продюсер работает параллельно?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

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

Метод send () является асинхронным. При вызове он добавляет запись в Буфер ожидающих записей отправляет и сразу возвращает. Это позволяет производитель объединяет отдельные записи для повышения эффективности.

и

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

Вот диаграмма, чтобы помочь: enter image description here

0 голосов
/ 26 октября 2018

Клиент Kafka использует org.apache.kafka.common.requests.ProduceRequest, который может переносить полезные нагрузки для нескольких разделов одновременно (см. http://kafka.apache.org/protocol.html#The_Messages_Produce).

Таким образом, он отправляет (используя org.apache.kafka.clients.NetworkClient) три параллельных запроса каждому из (трех) посредников, т. Е .:

- sends records for topic-partition0, topic-partition1, topic-partition2 to broker 1
- sends records for topic-partition3, topic-partition4, topic-partition5 to broker 2
- sends records for topic-partition6, topic-partition7, topic-partition8 to broker 3

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

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

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