Каждая тема в Кафке может быть организована во многие разделы. Разделение позволяет увеличить пропускную способность параллельного потребления.
Производитель публикует сообщение в теме с помощью клиентской библиотеки производителя 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 потоками. Каждый потребитель может потреблять одновременно из нескольких потоков. Обратите внимание, что количество потоков и разделов здесь равно. В случае, если количество потоков превышает разделы, некоторые потоки не получат никаких сообщений, поскольку им не будут назначены какие-либо разделы.
так что kafka исправить один клиент должен сопоставить один раздел, а один раздел также должен отображать один раздел? – regrecall
Один потребитель отображает один или несколько разделов. – Lundahl