【发布时间】:2017-05-18 16:40:38
【问题描述】:
我有一个由两个字段“键入”的记录流,然后分配了一个间隔为 30 秒的会话窗口。我使用附加到记录的“时间戳”作为事件时间。我正在使用“assignAscendingTimestamps”水印。
以以下记录为例。流由 (user,place) 键入。
记录1:用户1,地点1,时间戳t1
Record2 : user2, place1, t1 后 30 秒的时间戳
Record3 : user1, place1, t1 30 秒内的时间戳
Record4 : user1, place1, t1 后 30 秒的时间戳
Record2 属于 user2,因此它属于不同的存储桶,因为流是键控的。因此,我希望 Record1、Record3 和 Record4 属于一个存储桶,而 Record2 属于另一个存储桶。
Bucket1
记录1:用户1,地点1,时间戳t1
Record3 : user1, place1, t1 30 秒内的时间戳
Record4 - user1, place1, t1 后 30 秒的时间戳
Bucket2
Record2 : user2, place1, t1 后 30 秒的时间戳
据我了解,只有 Record4 到达时才会触发包含 Record1 和 Record3 的会话窗口。但是当我运行代码时,一个只包含 Record1 的会话在 Record2 到达时被触发,因为 Record2 的时间戳在 Record1 的时间戳的时间间隔(30 秒)之后,尽管 Record2 的密钥不同。我浏览了 Flink 的文档和几个我可以在网上找到的 Session Windows 示例。然而我无法解决这个问题。我在这里缺少什么吗?这可能是因为上升的时间戳水印吗?
【问题讨论】:
标签: apache-flink flink-streaming