如何在apache flink合并两个数据流?

2skhul33  于 2021-03-24  发布在  Flink
关注(0)|答案(1)|浏览(931)

我使用flink来处理我的streaming数据。
我有两个数据源:a和b。

// A
DataStream<String> dataA = env.addSource(sourceA);
// B
DataStream<String> dataB = env.addSource(sourceB);

我使用map来处理来自a和b的数据。

DataStream<String> res = mergeDataAAndDataB();   // how to merge dataA and dataB?

说源a正在发送: "aaa","bbb","ccc"... ,源b正在发送:"A","B","C"..."A","B","C"...。 我想做的是把它们合并成Aaaa, Bbbb, Cccc...来生成一个新的DataStream`对象。
如何实现这个目标?

ddrv8njm

ddrv8njm1#

在flink中,有两种流的合并。

dataA.union(dataB)

将创建一个新的流,它包含两个流的元素,以某种任意的方式混合,也许是"aaa","bbb","A","ccc","B","C",这不是你所要求的 -- 只是为了完整地提及它。
你想要的是创建一个连接的流,通过

dataA.connect(dataB)

然后你可以用RichCoFlatMapFunctionKeyedCoProcessFunction来处理这些字符串,计算出一种连接,将这些字符串粘合在一起。
你会在flink文档中找到关于连接流的教程,在教程附带的训练练习中也有一个相当接近的例子。

相关问题