js计时器的启动与停止_Flink 可重播的过程函数:时间,顺序和计时器

本文讲述了Bird公司如何使用Flink处理踏板车遥测数据,检测踏板车的离线状态。通过Flink作业,设置计时器来检测踏板车停止发送遥测记录,但在Kafka回填数据时遇到了乱序和水印问题。解决方案包括正确提取水位线、理解Kafka回填和数据顺序、以及使用BufferedKeyedProcessFunction来同步事件时间和处理时间,确保在回放过程中得到一致的结果。
摘要由CSDN通过智能技术生成

如果您想深入了解数据流和实时处理,请考虑加入我们的Bird团队!

该帖子也出现在Ververica Flink博客上。

通过流处理检测脱机踏板车

Bird面临的一些最有趣的挑战涉及处理无底座物理硬件。 踏板车硬件不仅会发生故障,而且踏板车可能会被不良行为者窃取或破坏。 我们从踏板车上收集遥测数据,但是分析这些数据可能是具有挑战性的。

流处理非常适合从遥测数据中提取见解。 我们使用Flink处理来自Kafka(我们的消息总线)的数据,运行在数据中查找不同信号的作业。 Flink提供了内置工具,可简化从Kafka的读取以及以容错的分布式方式处理流。 Flink还提供了许多内置的处理功能,以及用于自定义逻辑的各种构建块。

作为一家企业,Bird需要跟踪我们硬件的运行状况。 踏板车不健康的一个症状是它停止发送遥测记录。 踏板车下线可能是由于电池问题,软件问题或硬件问题。 我们需要知道何时发生这种情况,以便我们能够尽快跟进。

我们编写了Flink作业,以检测踏板车何时下线,并迅速遇到一系列棘手的问题,其中包括Kafka,事件时间,水印和排序。

Flink方法

伯德(Bird)指的是踏板车向我们发送的每条遥测记录。 我们使用Flink作业来记录给定踏板车的每个轨道的时间戳,并设置计时器在经过一定时间后触发。 如果在计时器启动之前看到另一条轨道,我们将重置计时器以反映该新轨道的时间戳。 如果没有看到其他曲目,计时器将触发并且我们将输出一个事件,反映该踏板车已脱机。

遥测监视很自然地适合键控过程功能,Flink使这项工作的启动和运行变得很简单。 处理功能在踏板车ID上保留键控状态以跟踪当前的联机/脱机状态,并使用事件时间计时器来处理脱机检测。 我们之所以选择此路线,是因为我们希望稍后使用轨道进行更复杂的操作,并且希望使用流程功能进行练习,而不仅仅是使用会话窗口。

似乎很简单。 但是,当我们针对旧数据测试这项工作的执行情况时,我们遇到了麻烦。 从Kafka重放较旧的数据时,作业会同时输出误报(检测到虚假的脱机事件)和误报(错过一些实际的脱机事件)。

调查问题变得非常复杂,我们找到的解决方案浮出水面,一些有趣的收获也可以应用到其他工作中。 我们了解到以下几点至关重要:

· 为什么在回填中订购不可靠,

· 如何使用Kafka正确提取时间戳和水印,以及

· 计时器和processElement如何相互作用。

Kafka的回填和数据顺序

让我们从订购开始。 我们有一个带有多个分区的Kafka主题,没有特定的分区键。 我们发现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值