我有4个不同事件类型的源,每个事件都有一个字符串字段,指示可以用于连接这些事件的键,每个键在自己的流中是唯一的。我的目标是生成一个DataStream,其中Ev由来自这4种事件类型的数据组成。我可以很容易地从源代码创建KeyedStreams,但是我想要一个巨大的connect()
,我可以立即加入所有的流,这样我就可以在一个进程函数/Map等中拥有所有的事件对象。对于给定的窗口。如果我一对一对地连接流,我将需要部分连接的中间表示
我如何才能实现这一点,或者只能按顺序加入这些流?
我有4个不同事件类型的源,每个事件都有一个字符串字段,指示可以用于连接这些事件的键,每个键在自己的流中是唯一的。我的目标是生成一个DataStream,其中Ev由来自这4种事件类型的数据组成。我可以很容易地从源代码创建KeyedStreams,但是我想要一个巨大的connect()
,我可以立即加入所有的流,这样我就可以在一个进程函数/Map等中拥有所有的事件对象。对于给定的窗口。如果我一对一对地连接流,我将需要部分连接的中间表示
我如何才能实现这一点,或者只能按顺序加入这些流?
1条答案
按热度按时间2mbi3lxu1#
值得一提的是,对于这样的用例,Table API更容易使用。对于表,这将只是工作,但对于数据流,你将不得不更加努力。
您的选择是按顺序连接它们,或者将所有4个流Map到某个统一的类型,将这些转换的流合并为一个流,然后编写一个KeyedProcessFunction,将传入事件的连接结果拼凑在一起。
相反,您可以将DataStream转换为Tables,联接它们,然后将生成的Table转换回DataStream(如果需要)。转换开销很小。但是,需要记住的一个问题是,连接所使用的状态不是您可以轻松演化的。如果将来需要更改连接(例如,在结果中包含另一个字段),则可能必须丢弃状态并重新开始。