在 Flink 中使用相同的滑动 window 加入 2 个以上的流

Joining more than 2 streams using the same sliding window in Flink

我有 3 个流 A、B 和 C,我应该将它们加入到一个流中,我们将其称为 ABC 并对其进行一些操作。

重要的是我使用大小为 X 的滑动 windows 和滑动 Y,其中 Y <= X*3

所有流都包含一些我用于连接的通用 ID,X、Y 是以秒为单位定义的时间参数。

我目前的实现是使用大小为 X 的滚动 window 将流 A 和 B 连接到 AB,然后使用大小为 X 的滑动 window 和滑动 Y 将 AB 连接到 C。

这可能会导致以下情况的错误答案:流 A 在时间 0 收到消息,流 B 在时间 Y+1 收到消息。在这种情况下,两条消息 应该 进入相同的滑动 window 因为 Y+1 < X,但最终结果是当我加入 AB 和 C 时,来自 B 的消息是由于最初的翻滚而失踪 window.

我可以使用单次滑动在 Flink 中进行多流连接 window 类似于我在 Spark 中连接多个数据帧的方式吗?

我认为在这种情况下可行的方法是使用两个滑动 window 联接——一个用于计算 AB,另一个用于将这些结果与 C 联接。您可能遇到的一个问题是时间戳在第一个连接产生的记录上——我不确定 Flink 将把什么时间戳放入包装你的 AB 事件的 StreamRecords 中,但是对于正常(非连接)windows,Flink 在结果上设置时间戳记录到 window 结束时间。在这种情况下,这可能不是您想要的。如果这是一个问题,您可以在第一次滑动之后放置一个额外的时间戳分配器 window 以在第二次连接(使用 C)之前适当地设置时间戳。