ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flink处理watermark未来时间问题

2021-12-18 22:00:41  阅读:205  来源: 互联网

标签:watermark 处理 Flink 水印 kafka 时间 当前 数据


出现原因

通常这种时间超前的数据是由于机器的时间有问题,如机器时间不同/埋点的日志时间错误,然后采集上来的数据使用的那个时间可能就会比当前时间超前了
【举例:处理机器时间戳100s,上报的日志写了2000s】

网上解决方法

1、从kafka读取出来之前先做过滤

在 Flink 从 Kafka 中消费数据后就进行 filter部分这种数据(可以获取到时间后和当前时间相比一下,如果超前或者超前多久就把这条数据丢掉,设置的超前 5分钟以上的数据就丢失),就不让进入后面生成水印,这样就不会导致因为水印过大而导致你后面的问题。

2、自定义水印生成策略

在生成水印的地方做判断,如果采集上来的数据的时间远大于当前时间(比如超过 5分钟)那么就不把当前水印的时间设置为数据的时间,而是用当前系统的时间代替
【自定义水印生成策略,正常为 Math.max(timestamp//当前时间, currentMaxTimestamp)//最大水印】

3.重写Kafka反序列化方法

在kafka反序列化的时候,判断kafka中日期字段的值,如果超过当前时间太多,则丢弃,或者重置为当前时间(重置其实可能导致正常数据丢失)。
【重写Kafka反序列化方法,kafka消息中消息的时间戳和上报的日志中的时间戳进行比较】

4、等待直到未来事件(不可行)

自定义一个watermark,当时间大于当前时间太多的时候,不更新当前的watermark,这样在watermark达到这条未来时间的时间点后,也会将这条数据纳入窗口计算,这种其实是比较理想的。但是这种没有完全的测试,感觉数据会一直存放在内存中,不知道会不会引起其他问题。
【这个相当于将等处理的机器到达2000s再处理前面的,容易造成数据堆积,不可行】

标签:watermark,处理,Flink,水印,kafka,时间,当前,数据
来源: https://blog.csdn.net/weixin_44303896/article/details/122017641

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有