Flink keyby / место выполнения задачи оператора окна и внутренних устройств - PullRequest
0 голосов
/ 02 мая 2020

Я новый большой для Флинк. Я пишу простую программу Flink PO C, в которой я могу получить ожидаемый результат. Но я не могу узнать о ключах и операциях с окнами. Ниже приведен мой код:

environment
.addSource(consumer)
.name("MyKafkaSource")
.setParallelism(2)
.flatMap(pojoMapper)
.name("MyPojoMapper")
.setParallelism(2)
.keyBy(new MyKeyExtractor())
.timeWindow(Time.seconds(60))
.apply(new SumFunction())
.name("MySumFunction")
.setParallelism(2)
.print()
.name("S3FileSink")
.setParallelism(2)

При развертывании задания Flink я получаю следующий график в интерфейсе Flink:

Визуализатор задач

Из выше изображение я понял это полностью, он использует 2 задачи и 4 слота, каждая задача с 2 параллелизмом. Первая задача имеет источник, вторая задача Pojo Mapper имеет функцию суммы, функцию приемника.

Теперь вопрос в том,

  1. Где живут операции KeyBy и Window? В первом или втором задании? Почему это не видно на изображении выше? Есть ли способ визуализировать это?

  2. Скажем, для 1 окна (интервал 60 с c) я получаю 100 различных ключей, и каждый ключ получает 5 записей в течение 1 минуты, так сколько оконных объектов создано внутри за 1 оконный интервал? Я предполагаю, что 100 оконных объектов созданы, и каждый оконный объект будет содержать 5 записей. Правильно ли мое предположение или нет? Если не кто-нибудь, пожалуйста, объясните, что происходит внутри? Также, если возможно, поделитесь любыми документами, связанными с этим.

1 Ответ

0 голосов
/ 02 мая 2020

Поскольку они связаны соединениями пересылки данных, операторы источника и плоской карты объединены в одну задачу, и то же самое относится к окну и приемнику. Но так как плоская карта и окно соединены с помощью keyBy, там требуется перестановка сети.

Таким образом, ваша работа имеет всего 4 задачи: 2 экземпляра источника плюс плоская карта и 2 экземпляра окна плюс приемник. Эти 4 задачи развернуты в 2 слотах задач, каждый из которых имеет задачу источника / плоской карты и задачу окна / приемника.

keyBy изображено там, где на диаграмме указано HA SH. keyBy не является оператором, а представляет собой описание того, как операторы до и после подключения keyBy.

Эти две строки кода

.timeWindow(Time.seconds(60))
.apply(new SumFunction())

вместе описывают оператор окна, который показан на диаграмме как mySumFunction. Окно находится во втором задании.

Вы правы, предполагая, что для каждого отдельного ключа есть окно, и каждый из этих 100 windows содержит 5 записей.

Чтобы узнать больше о Flink, я могу порекомендовать Apache Обучение Flink , Потоковая обработка с Apache Flink и поиск сообщений Flink Forward. на YouTube.

...