Как соединить два потока и управлять ими во Флинке? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть DataStream<Tuple2<String, Double>> one и DataStream<Tuple2<String, Double>> second, где у первого гораздо больше элементов от другого, и у них разные ключи. Более того, Datastream "two" имеет в основном одну пару ключ-значение. Итак, я хочу соединить эти потоки, чтобы разделить значения первого потока данных на постоянное значение второго потока данных. Как это можно сделать в Apache Flink? Делается ли это с подключенными потоками данных или это другой способ?

1 Ответ

1 голос
/ 28 февраля 2020

В описанном случае лучше всего просто использовать шаблон состояния широковещания. Второй поток с небольшим количеством элементов станет широковещательным потоком, а первый поток с большим количеством элементов будет затем обогащен элементами второго. Итак, у вас будет что-то вроде:

//define broadcast state here

firstStream.keyBy([someKey])
.connect(secondStream.broadcast([mapStateDescriptor])
.process([YourProcessFunction])

И затем в вашей функции процесса для элемента процесса вы можете выполнить обогащение для получения ожидаемого кортежа.

Более подробно о шаблоне широковещания можно можно найти здесь: https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/state/broadcast_state.html

...