2014-09-01 2 views
4

Я прочитал документ кафки, все еще не знаю, как использовать одну тему параллельно?Кафка как потреблять одну тему параллельно

Предположим: У меня есть одна тема вроде «что-то случилось» (не разделяйте эту тему), и у меня есть много клиентов, которые хотят ее уничтожить. Итак, что мне делать, чтобы многие клиенты могли использовать его параллельно? используя раздел и группу клиентов?

У меня есть идея об этом, но я не уверен, правильно ли это.

сделать много разделов по одной теме и сделать один раздел одним клиентом, поэтому один производитель должен производить то же самое с этими разделами, и каждый клиент в другой группе клиентов, правильно?

ответ

5

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

+0

так что kafka исправить один клиент должен сопоставить один раздел, а один раздел также должен отображать один раздел? – regrecall

+0

Один потребитель отображает один или несколько разделов. – Lundahl

7

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

Производитель публикует сообщение в теме с помощью клиентской библиотеки производителя Kafka, которая балансирует сообщения через доступные разделы с помощью Partitioner. Брокер, к которому подключается производитель, заботится о передаче сообщения брокеру, который является лидером этого раздела, используя информацию владельца раздела в zookeeper. Потребители используют высокоуровневую потребительскую библиотеку Kafka (которая управляет изменениями брокера, управляет информацией о смещении в zookeeper и неявно определяет информацию о владельце раздела и т. Д.), Чтобы потреблять сообщения из разделов в потоках; каждый поток может быть отображен на несколько разделов в зависимости от того, как потребитель выбирает создание потоков сообщений.

Например, если в теме имеется 10 разделов для темы и 3 экземпляра потребителя (C1, C2, C3 в этом порядке), все из которых принадлежат к одной и той же группе потребителей, у нас могут быть разные модели потребления, которые позволяют читать параллелизм, как показано ниже

Каждый потребитель использует один поток. В этой модели, когда C1 запускает все 10 разделов темы, отображаются в один и тот же поток, и C1 начинает потреблять из этого потока. Когда начинается C2, Kafka перебалансирует разделы между двумя потоками. Таким образом, каждый поток будет назначен на 5 разделов (в зависимости от алгоритма ребалансировки он может также быть 4 против 6), и каждый потребитель потребляет его поток. Аналогично, когда начинается C3, разделы снова балансируются между тремя потоками. Обратите внимание, что в этой модели при потреблении из потока, назначенного более чем одному разделу, порядок сообщений будет перемешаться между разделами. Каждый потребитель использует несколько потоков (скажем, C1 использует 3, C2 использует 3 и C3 использует 4). В этой модели, когда C1 запускается, все 10 разделов назначаются 3 потокам, а C1 может потреблять из трех потоков одновременно с использованием нескольких потоков. Когда начинается C2, разделы перебалансируются между 6 потоками, и аналогично, когда начинается C3, разделы перебалансируются между 10 потоками. Каждый потребитель может потреблять одновременно из нескольких потоков. Обратите внимание, что количество потоков и разделов здесь равно. В случае, если количество потоков превышает разделы, некоторые потоки не получат никаких сообщений, поскольку им не будут назначены какие-либо разделы.

Смежные вопросы