Kafka Потребительские группы
Каждый потребитель Kafka принадлежит к группе потребителей, то есть ее можно рассматривать как логический контейнер / пространство имен для группы потребителей. Группа потребителей может получать сообщения из одной или нескольких тем. Экземпляры в группе потребителей могут получать сообщения с нуля, одного или нескольких разделов в каждой теме (в зависимости от количества разделов и экземпляров потребителей)
Как разделы Kafka назначаются работникам Flink?
В Kafka каждому потребителю из той же группы потребителей назначается один или несколько разделов. Обратите внимание, что два потребителя не могут использовать один и тот же раздел. Количество потребителей Flink зависит от параллелизма Flink, что означает, что каждая задача Flink (мы примерно рассматриваем каждую задачу Flink = слоты Flink = параллелизм Flink = доступное ядро ЦП) может выступать в качестве отдельного потребителя в группе потребителей. Кроме того, вы должны заметить, что разделы - это просто абстракция для группировки разделов и данных: только внутренние разделы назначаются экземплярам параллельных задач Flink в соответствии со следующей схемой.
Возможны три случая:
1. kafka разделы == flink параллелизм
Этот случай идеален, поскольку каждый потребитель заботится об одном разделе. Если ваши сообщения сбалансированы между разделами, работа будет равномерно распределена между операторами Flink
2. kafka разделы <параллель flink </em>
Когда заданий Flink больше, чем разделов Kafka, некоторые потребители Flink просто бездействуют, не читая никаких данных:
В этом случае, когда у вас более высокий параллелизм, чем количество разделов
(потому что вы хотите использовать его в будущем операторе), вы можете сделать .rebalance()
после источника Kafka. Это гарантирует, что все операторы после источника Kafka получат равномерную нагрузку за счет необходимости перераспределения данных (так что де / сериализация + сетевые издержки).
3. перегородки кафки> параллель flink
Когда разделов Kafka больше, чем задач Flink, потребительские экземпляры Flink будут подписываться на несколько разделов одновременно:
Во всех случаях Flink оптимально назначит задачи разделам. В вашем случае вы можете создать несколько групп потребителей Kafka, используя соединитель Flink Kafka, и назначать ему темы (например, с помощью Regex). Таким образом, если Flink имеет три группы потребителей с 10 разделами в каждой, назначая 30 рабочих мест (ядро) для Flink Job Manager, вы можете достичь идеального случая.
Refrences:
1 , 2 , 3