Потребление сообщений Apache Kafka, когда количество разделов превышает количество потребителей

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

Простой пример:
2 раздела, 1 потребитель
Производители контролируют назначение разделов с помощью ключа.
Сообщение 1 входит и отправляется в раздел A
Сообщение 2 входит и отправляется в раздел B
Сообщение 3 приходит и переходит в раздел A

Я знаю, что Сообщение 1 будет использовано до сообщения 3, потому что они находятся в одном разделе. Но как насчет сообщения 2? Будет ли он использован до Сообщения 3 или после? Или это могло измениться? Могло ли оно быть употреблено до сообщения 1?

Более того, что, если для раздела A будут продолжать поступать новые сообщения и производство будет быстрее, чем потребление? Будет ли Сообщение 2 находиться в Разделе B неопределенное время? Когда это будет употреблено? Есть ли гарантии, что сообщения не будут сидеть вечно?

В более общем плане: если потребителю назначено несколько разделов, как и когда этот потребитель переключается между этими разделами?


person TwoScoopsOfHot    schedule 22.01.2014    source источник
comment
Ответы на ваши вопросы во многом зависят от используемой вами потребительской реализации. Kafka не накладывает ограничений на то, как потребитель будет использовать данные из нескольких разделов. Например, разные потребительские реализации на разных языках могут вести себя по-разному.   -  person Régis B.    schedule 10.04.2017


Ответы (1)


Гарантии при заказе

Кафка предоставляет гарантии заказа только внутри раздела. В вашем примере Сообщение 2 может быть использовано либо перед Сообщением 1, либо после Сообщения 1, либо после Сообщения 3. Это зависит только от производительности потребителя. Дополнительная информация об этом доступна в документации: https://kafka.apache.org/documentation.html#introduction (Темы «Потребители» и «Гарантии»).

Медленное потребление

Брокер Kafka не знает потребителей. Он сохраняет сообщения в сегментах журнала до тех пор, пока соответствующий сегмент журнала не будет удален. Потребители могут подключиться к брокеру в любой момент и начать потребление с самого старого сегмента журнала. Минимальное время хранения сообщений контролируется двумя свойствами конфигурации: log.retention.hours и log.retention.bytes (с возможными переопределениями для каждой темы). Подробнее об этом читайте в документации: https://kafka.apache.org/documentation.html#brokerconfigs.

Отвечая на ваш вопрос: если потребитель в конечном итоге становится медленнее, чем производитель, у него есть время, чтобы наверстать упущенное (по умолчанию 1 неделя). В противном случае некоторые неиспользованные сообщения будут удалены навсегда.

Использование нескольких разделов

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

person Wildfire    schedule 23.01.2014