背景:
在flink实际开发过程种:
一般我们处理日志数据时候,我们会指定event time 作为我的时间作为程序内窗口函数内时间基准。
问题:但是由于部分机器节点存在网络延迟等原因,并且kafka 消息队列本身也不能保证全局消息的一致性的问题。导致时间乱序并且延迟问题。为了解决这种问题flink 提供三种方式来改变这个问题。
分别是watermark allowedLateness() 和sideOutputLateDate() 三种机制来保证获取并处理数据。
三种结合使用例子:
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows
import org.apache.flink.streaming.api.windowing.time.Time
object demo1 {
def main(args: Array[String]): Unit = {
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(1)
//从调用开始给env创建的每一个streamin 追加时间特征
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime )
val inputStream: DataStream[String] = env.

本文探讨了在Flink开发中处理乱序日志数据的挑战及解决方案,详细介绍了使用watermark、allowedLateness和sideOutputLateData机制来确保数据的正确处理,通过实例代码演示了这些机制如何共同工作以解决数据延迟和乱序问题。
最低0.47元/天 解锁文章
1029

被折叠的 条评论
为什么被折叠?



