如果您想深入了解数据流和实时处理,请考虑加入我们的Bird团队!
该帖子也出现在Ververica Flink博客上。
通过流处理检测脱机踏板车
Bird面临的一些最有趣的挑战涉及处理无底座物理硬件。 踏板车硬件不仅会发生故障,而且踏板车可能会被不良行为者窃取或破坏。 我们从踏板车上收集遥测数据,但是分析这些数据可能是具有挑战性的。
流处理非常适合从遥测数据中提取见解。 我们使用Flink处理来自Kafka(我们的消息总线)的数据,运行在数据中查找不同信号的作业。 Flink提供了内置工具,可简化从Kafka的读取以及以容错的分布式方式处理流。 Flink还提供了许多内置的处理功能,以及用于自定义逻辑的各种构建块。
作为一家企业,Bird需要跟踪我们硬件的运行状况。 踏板车不健康的一个症状是它停止发送遥测记录。 踏板车下线可能是由于电池问题,软件问题或硬件问题。 我们需要知道何时发生这种情况,以便我们能够尽快跟进。
我们编写了Flink作业,以检测踏板车何时下线,并迅速遇到一系列棘手的问题,其中包括Kafka,事件时间,水印和排序。
Flink方法
伯德(Bird)指的是踏板车向我们发送的每条遥测记录。 我们使用Flink作业来记录给定踏板车的每个轨道的时间戳,并设置计时器在经过一定时间后触发。 如果在计时器启动之前看到另一条轨道,我们将重置计时器以反映该新轨道的时间戳。 如果没有看到其他曲目,计时器将触发并且我们将输出一个事件,反映该踏板车已脱机。
遥测监视很自然地适合键控过程功能,Flink使这项工作的启动和运行变得很简单。 处理功能在踏板车ID上保留键控状态以跟踪当前的联机/脱机状态,并使用事件时间计时器来处理脱机检测。 我们之所以选择此路线,是因为我们希望稍后使用轨道进行更复杂的操作,并且希望使用流程功能进行练习,而不仅仅是使用会话窗口。
似乎很简单。 但是,当我们针对旧数据测试这项工作的执行情况时,我们遇到了麻烦。 从Kafka重放较旧的数据时,作业会同时输出误报(检测到虚假的脱机事件)和误报(错过一些实际的脱机事件)。
调查问题变得非常复杂,我们找到的解决方案浮出水面,一些有趣的收获也可以应用到其他工作中。 我们了解到以下几点至关重要:
· 为什么在回填中订购不可靠,
· 如何使用Kafka正确提取时间戳和水印,以及
· 计时器和processElement如何相互作用。
Kafka的回填和数据顺序
让我们从订购开始。 我们有一个带有多个分区的Kafka主题,没有特定的分区键。 我们发现