转自钉钉群21789141:请教问题 利用BoundedOutOfOrdernessTimestampExtractor 进行每五秒统计一次数据(数据来源socket),发现最近一条记录不会被触发统计,只有当下一条数据写入,之前的数据才会被触发统计,请问是什么原因?
谢进超:Watermark是随数据产生的,窗口时间现在处于什么位置看Watermark,只有新产生的一条数据超出窗口长度,这个窗口才会触发计算,简单的说需要一条数据来看现在是什么时间
问:
徐涛:窗口被触发的时间是什么呢?是watermark超过了窗口的end就会被触发吗?
因为这样才能确保没有记录再落到这个窗口里了吧
问:个人理解 假设窗口时间是5秒 分配成:0-5 等他检查到watermark大于5的时候会被触发 但是现在watermark可能一直是1 所以一直不触发
徐涛:因为你的第一条数据一定是小于窗口的结束时间的, 如果第一条就触发了窗口,你怎么知道还有没有数据也是落在这个窗口里面呢?
万一有的话,你的窗口已经触发了,那这个数据就没有被纳入计算。
莱昂:如果还有数据落在窗口里 你可以设置延迟时间啊
然后获取sideoutput就可以获取到延迟数据了啊
https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/operators/windows.html
问:其实我本来期望的是 假设5秒钟 到了落入窗口的最后时间 就触发 然后发现BoundedOutOfOrdernessTimestampExtractor 的watermark需要新的记录进来跟新的 所以发现一开始的理解错了
徐涛:嗯,窗口到时间就触发只是一种理想情况,实际因为有乱序,只有确保watermark 超过窗口结束时间才能确保触发
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。