Flink对数据延迟的解决方案!

点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~

任何文章不要过度深思!

万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」

不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人

怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

1 前言

ca37374ac14f85a073b8fd0cdd69cb73.png

一系列数据(Data-5, Data-4, Data-1, Data-3, Data-2)按一定顺序排列。

异常:数据到达顺序与它们实际发生时间顺序不一致。按照时间戳来看,Data-1最先发生,但却排在Data-4和Data-5之后。

Data-1即为延迟数据,因为它比Data-4和Data-5更早发生,但更晚到达。

注意 data-1 只是延迟,不是丢失了!

2 数据延迟的影响

2.1 影响计算结果

在Flink的窗口计算中,乱序数据会导致窗口的关闭时机不准确,从而影响计算结果。如若按照窗口大小来划分,Data-1可能会被分配到一个错误的窗口中。

2.2 实时性降低

延迟数据的存在会降低Flink处理数据的实时性。如果Data-1承载着重要的实时信息,那么延迟到达会影响决策的时效性。

2.3 数据丢失风险

某些情况下,严重的延迟数据甚至可能导致数据丢失。例如,如果窗口已经关闭,而迟到的数据又无法被重新处理,那么这些数据就会丢失。

3 导致数据延迟的原因

  • 网络传输延迟: 数据在网络传输过程中可能遇到拥塞、丢包等问题,导致延迟。

  • 数据源产生延迟: 数据源本身可能存在延迟,例如数据库查询缓慢、传感器数据采集不及时。

  • Flink任务处理瓶颈: Flink任务的并行度、资源配置等因素可能导致处理速度跟不上数据到达的速度。

  • Watermark设置不合理: Watermark是Flink用来处理乱序数据的重要机制,如果Watermark设置不合理,也会导致数据延迟问题。

4  解决思路

  • 使用事件时间作为标准

  • 设置水位线:根据数据特性和业务需求,合理设置Watermark生成策略。

  • 设置允许延迟的时间:对于允许一定程度的延迟,可以在窗口定义时设置允许迟到的时间。在窗口关闭后,仍然会等待一段时间,以接收迟到的数据

5 步骤

  1. 定义窗口时间

  2. 设置:水位线 为最大事件时间 - 允许延迟的时间

5.1 触发窗口计算

  1. 水位线 > 窗口时间:当水位线超过窗口的结束时间,保证了窗口内的数据基本都到达了,避免过早触发计算导致结果不准确。

  2. 窗口内有数据:这个条件保证了窗口计算是有意义的,避免对空的窗口进行计算。仅当窗口内存在数据时,才会触发计算,即使水位线已超过窗口时间

5.2 案例

假设现在:

  • 窗口时间=10s

  • 允许延迟的时间 =3.5s

  • 水位线=最大EventTime -允许延迟的时间

触发窗口计算条件:

  • 水位线>窗口时间

  • 窗口内有数据

3cdd8c33a8161566169cc6503420b39f.png

事件1: 表示一个到达Flink系统的事件,其事件时间为8。

窗口时间: 设置为10s,即每10s生成一个新窗口。

允许延迟时间: 设置3.5s,表示系统允许事件到达的时间延迟最多为3.5s。

水位线: 水位线是Flink用于跟踪事件时间的一个特殊标记,它的计算方式为:最大事件时间 - 允许延迟时间。在当前示例中,水位线为max(8) - 3.5 = 4.5<10,所以不触发计算。

事件二来了,看起来它是个延迟事件了。但依旧不能触发计算:

10bf36c4485ed5dc0e7f362bc60456b7.png

事件三来了,开始触发计算了:

9091b3367d1f01446f3e21a574aefe83.png

但即便如此,对那些超长延迟的数据还是无法计算。处理方案:

  • 单独搜集,稍后处理

  • 完全不处理,直接丢弃

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

  • LLM Agent应用开发

  • 区块链应用开发

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

  • 编程严选网

写在最后

编程严选网http://www.javaedge.cn/

专注分享软件开发全生态相关技术文章视频教程资源、热点资讯等,全站资源免费学习,快来看看吧~

a5243835478f59095cd5d78828ddee9a.png

编程严选】星球

88ebd0578b8b32f127f0183a318bcd6b.jpeg

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习方法等等。

76aa8849eebf3a14f4d80ee993457cd1.jpeg添加好友备注【技术群交流】拉你进技术交流群

关注公众号后,在后台私信:

  • 回复【架构师】,获取架构师学习资源教程

  • 回复【面试】,获取最新最全的互联网大厂面试资料

  • 回复【简历】,获取各种样式精美、内容丰富的简历模板

  • 回复 路线图,获取直升Java P7技术管理的全网最全学习路线图

  • 回复 大数据,获取Java转型大数据研发的全网最全思维导图

  • 更多教程资源应有尽有,欢迎关注并加技术交流群,慢慢获取

  • 为避免大量资源被收藏白嫖而浪费各自精力,以上资源领取分别需要收取1元门槛费!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值