Раздел специфичный, флинк, кафка, потребитель - PullRequest
0 голосов
/ 25 июня 2018

Я создал потоковую программу для потокового оплога mongodb, используя flink и kafka. Согласно обсуждению со службой поддержки Flink, порядок потоковой передачи не может быть гарантирован через разделы kafka. Я создал N разделов kafka и хочу создать N потребителя flink kafka на раздел, поэтому порядок потоковой передачи должен поддерживаться, по крайней мере, в конкретном разделе. Подскажите пожалуйста, можно ли создать раздел конкретного потребителя флинк кафки?

Я использую env.setParallelism (N) для параллельной обработки.

Прикрепленное изображение показывает архитектуру программы высокого уровня enter image description here

1 Ответ

0 голосов
/ 26 июля 2018

После долгих исследований я нашел решение по своему собственному вопросу. Поскольку глобальное упорядочение через раздел kafka не является практичным, я создал N номеров разделов kafka с N параллелизмом flink и написал пользовательский разделитель kafka, который переопределит стратегию разбиения kafka по умолчанию и отправит записи в определенный раздел в соответствии с логикой, указанной в настраиваемом разделителе. Это гарантирует, что конкретные сообщения всегда отправляются в один и тот же раздел. при настройке параллелизма flink помните о следующих моментах.

1) разделы kafka == параллелизм flink: этот случай идеален, поскольку каждый потребитель заботится об одном разделе. Если ваши сообщения сбалансированы между разделами, работа будет равномерно распределена между операторами Flink;

2) разделы kafka <параллелизм flink: некоторые экземпляры flink не будут получать никаких сообщений. Чтобы избежать этого, перед любой операцией необходимо вызвать ребалансирование входного потока, что приведет к перераспределению данных: </p>

3) разделы kafka> параллелизм flink: в этом случае некоторые экземпляры будут обрабатывать несколько разделов. Опять же, вы можете использовать ребаланс, чтобы равномерно распределять сообщения среди работников.

...