Как поток Kafka распределяется среди диспетчеров задач в Flink? - PullRequest
1 голос
/ 04 августа 2020

Say a Flink Job (три диспетчера задач tm1, tm2 и tm3) использует Kafka topi c в качестве источника, как поток распределяется между ними? Кто занимается раздачей?

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Это делается в FlinkKafkaConsumerBase в его методе open(). Контекст времени выполнения Flink предоставляет методы, которые каждый экземпляр может использовать для определения общего количества параллельных экземпляров потребителя Flink Kafka, а также индекса указанного экземпляра c. Каждый экземпляр использует эти методы, чтобы независимо брать на себя ответственность за чтение из определенных разделов c.

0 голосов
/ 06 августа 2020

Добавляя к тому, что написал Дэвид, вы должны иметь в виду одну вещь: макс. Параллелизм KafkaProducer ограничен количеством разделов. Поскольку Flink начнет распределять задачи, начиная с первого слота (первый диспетчер задач), а затем go со 2-го и так далее, и повторите это для каждого источника, вы можете увидеть несбалансированную рабочую нагрузку, если у вас будет больше задач. менеджеры, чем topi c -partitions.

В сценарии, где у вас много kafka-sources с небольшим количеством topi c -partitions, этот дисбаланс становится все более и более заметным. В крайнем случае у вас есть много источников только с одним разделом, все эти источники будут использованы первым слотом / диспетчером задач. Вы можете обойти этот крайний случай, если используете группы совместного использования слотов . Это, конечно, крайний случай, но было бы неплохо иметь это в виду, когда вы определяете свои ресурсы и рабочие процессы.

...