我想使用 Flink 合并两个(多个)流。两个流本身都是有序的,我希望合并结果也被排序。举个例子
[1,2,4,5,7,8, ...] and [2,3,6,7, ..]
应该产生以下结果。
[1,2,2,3,4,5,6,7,7,8,...]
有适合此用例的操作员吗?
我想不出使用内置运算符来完成此操作的简单方法。
我可能会使用 KeyedCoProcessFunction 来实现它。此用例需要等待两个输入中的下一个元素,然后才能知道要发出哪个元素,这意味着您必须准备好缓冲来自任一输入流的任意多个元素,同时等待来自另一个流的下一个元素。您可以使用 ListState 来存储该缓冲区。
更新:
如果该字段是时间戳,那么您可以合并流并按事件时间戳对合并结果进行排序。这可以使用 Flink SQL 相当简单地完成。
文档:UNION 订购方式