Flink处理watermark未来时间问题

出现原因

通常这种时间超前的数据是由于机器的时间有问题,如机器时间不同/埋点的日志时间错误,然后采集上来的数据使用的那个时间可能就会比当前时间超前了
【举例:处理机器时间戳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再处理前面的,容易造成数据堆积,不可行】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flink中,Watermark是一种用于衡量Event Time进展的机制。它用于处理实时数据中的乱序问题,并常与窗口结合使用来实现事件的有序处理Watermark可以被理解为一种时间戳标记,表示在该标记之前的事件都已经到达,因此可以触发窗口计算。Watermark的生成可以通过实现WatermarkGenerator接口来实现,该接口包含了onEvent和onPeriodicEmit两个方法来生成Watermark。在onEvent方法中,可以观察流事件数据,并在获取到带有Watermark信息的特殊事件元素时发出Watermark。而在onPeriodicEmit方法中,可以根据需要周期性地发出Watermark。同时,在Flink中,还可以通过WatermarkStrategy接口来定义Watermark的生成策略,该接口包含了createTimestampAssigner方法用于实例化一个可分配的时间戳生成器,以及createWatermarkGenerator方法用于实例化一个Watermark生成器。总之,WatermarkFlink中起到了衡量事件时间进展和触发窗口计算的重要作用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Flink:Watermark](https://blog.csdn.net/qq_24325581/article/details/117515189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [1分钟理解FlinkWatermark机制](https://blog.csdn.net/m0_68470434/article/details/126742410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值