Flink中实用的小知识点整理

目录

1、Flink使用WaterMark处理乱序事件
2、累加器和计数器
3、Window使用
4、流的切分和合并
5、任务链
6、Flink消费kafka数据起始offset配置
7、Flink消费kafka数据,消费者offset提交配置
8、数据源
9、数据存放
10、运行时环境的区别
11、keyedStream中进行聚合操作

一.Flink使用WaterMark处理乱序事件[1]

watermark是用于处理乱序事件的,而正确的处理乱序事件,通常用watermark机制结合window来实现。

流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络、背压等原因,导致乱序的产生(out-of-order或者说late element)

但是对于late element,我们又不能无限期的等下去,必须要有个机制来保证一个特定的时间后,必须触发window去进行计算了。这个特别的机制,就是watermark。

关于水位线机制这篇博客讲的比较通俗易懂,Flink流计算编程--watermark(水位线)简介

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

//将TimeCharactersistic设置为EventTime。
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

val text = env.socketTextStream("localhost", 9999)

// 指定watemark的实现
text.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessGenerator ) 

自定义的实现AssignerWithPeriodicWatermarks接口的类

class BoundedOutOfOrdernessGenerator extends AssignerWithPeriodicWatermarks[MyEvent] {
    //最大允许的乱序时间是10s,告诉Flink希望消息最多有10s的延迟,每个窗口仅在waterMark通过时被处理
    val maxOutOfOrderness = 10000L;
    var currentMaxTimestamp: Long; 

    //extractTimestamp方法是从数据本身中提取EventTime
    override def extractTimestamp(element: String, previousElementTimestamp: Long): Long = {
        val timestamp = element.getCreationTime()
        currentMaxTi
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值