开发者社区> 问答> 正文

EventTimeTrigger源码求帮忙解读,求各位大佬帮帮忙,不胜感激

疑问点一:onElement是每条数据进来都会调用,当收到水印是会返回TriggerResult.FIRE ,其他情况都会registerEventTimeTimer,为什么不是注册一次就行,这样不会提高效率吗? 疑问点二:onEventTime也能触发TriggerResult.FIRE,这个具体什么时候会触发?这个触发器不是只有水印达到会触发吗*来自志愿者整理的flink邮件归档

展开
收起
雪哥哥 2021-12-07 15:56:43 675 0
1 条回答
写回答
取消 提交回答
  • Hi, 这里是我之前对Window、State、Watermark三者关系的一个总结https://blog.csdn.net/xianzhen376/article/details/90415350

    同时你的问题引发了新的思考,因为之前并没有关注onWaterMark的处理。简单的过了下源码后,我这里抛砖引玉几点:

    1. registerEventTimeTimer 并不是注册定时器,是一个很轻量的实现,实际上是一个Queue,记录以namespace和key为索引的window.maxTimestamp,此处的window表示Element event time所属的window,例如十分钟一个weindow,则05:03属于05:00-05:100, maxTimeStamp为05:10;
    2. 何时触发注册的信息?在porcessWatermark时,遍历上述Queue,如果注册的time大于Watermark,就会触发所有key的Window计算(这点和我之前理解的只处理单key 数据不同)
    3. 为什么只注册一次不行?在处理数据乱序情况下,一般current window小于Element所属的Window,同时随着time的上升,需要更新。
    4. 针对疑问二,如果time所属的window已经超过了curWindow.maxTimestamp就触发Element对应key的计算;*来自志愿者整理的flink
    2021-12-07 16:26:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java开发手册(泰山版)灵魂13问 立即下载
Java开发手册(泰山版) 立即下载
Storm源码走读笔记 立即下载