热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink乱序数据处理过程解析

流数据流经source,再到operator,由于网络延迟等原因,导致乱序的产生(这里的乱序是指事件产生的时间EventTi

 

 

 

流数据流经source,再到operator,由于网络延迟等原因,导致乱序的产生(这里的乱序是指事件产生的时间EventTime和到达处理机制进行处理的顺序不一样),特别是使用kafka的话,多个分区的数据source之后无法保证有序。所以在进行window计算的时候,如果有涉及时间的,比如(前一小时的访问量),必须要有个机制来保证操作结果的相对准确性。Flink运用一下几个机制来保证事件事件和操作时间的相对一致。

1.warterMark

在不添加EventTime,只有窗口操作的情况下,Flink实时性得到了最大的发挥,但是于此同时,操作结果也非常不准确,只要过来的数据有达到窗口的结束时间window_end_time的,将会马上触发窗口,那么在接收数据是乱序的情况下,将会导致此窗口的数据大部分的丢失

warter是用来定义延迟触发窗口操作的时间的,假设窗口时00:00~00:05,warter为1分钟,那么相当于将接收这个窗口中的数据的时间向后延长了1分钟,自然操作这些数据的时间也会延迟1分钟。这是为了形象的理解,实际上时warterMark倒退了1分钟,等到wartermark的时间真正达到和window_end_time时间相同时,才触发窗口。

2.allowedLateness

在添加warterark之后,保证了绝大多数数据的准确性,但是warterMark的时间也不能设置过长,因为flink框架的特点就是低延迟,设置过高不利于保证实时性。因此,我们一般会将warter设置在一个较小但是又能保证绝大多数数据都会被计算。那么剩下仍旧有少数数据没有在此事件内到达,导致我们没有在warterMark这段时间内接收到,allowedLateness是为了保证warter之后短时间内的数据可以被计算的,在window_end_time+watermark 至window_end_time+watermark+allowedLateness的属于此窗口的数据,只要来一次就会和window中的其它数据被计算一次,这样保证了短期内对计算结果的更新。

3.OutputLateData

window_end_time+watermarkallowedLateness之后的极少量数据,将会被放入OutputLateData进行处理,不会主动并入之前的计算结果进行计算。

如下,是刚才花了很久时间画出来的一张很丑的图。。。。。。。。。。。。。。。

 

 

 


推荐阅读
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • Storm集成Kakfa
    一、整合说明Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下:StormKafkaIntegratio ... [详细]
  • 以Flink为例,消除流处理常见的六大谬见
    以Flink为例,消除流处理常见的六大谬见 ... [详细]
  • 自定义窗口实现同时按照计数和时间(processing-time)触发计算 TriggersA Trigger determineswhenawindow(asformedbyth ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 如何设置易语言程序默认以管理员权限运行的方法详解
    在Windows 7及以上版本中,由于UAC(用户账户控制)的限制,许多易语言编写的程序在未以管理员权限运行时,可能会遇到权限不足的问题,从而无法执行某些关键操作。本文详细介绍了如何设置易语言程序默认以管理员权限运行的方法,确保程序能够顺利执行所有必要的功能。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 启动activemq_「Java」SpringBoot amp; ActiveMQ
    一、消息队列消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构, ... [详细]
  • 基于2.1.0构造函数初始化accumulator,这是一个发送的缓冲队列管理器this.accumulatornewRecordAccumulator(logContext,co ... [详细]
  • 经验总结:你觉得你真的了解Kafka消费者吗?附超全教程文档
    为什么要公开这些面试题?原因一:身边从事Java开发的人员越来越多,我的表弟表妹们,朋友的表弟表妹们,朋友的 ... [详细]
author-avatar
大华出入境
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有