Flink端到端一致性&水位线

本文详细解释了水位线在Flink中的作用,以及1.4版本后如何通过CheckPoint机制确保端到端的精确一次消费。涉及Source端的偏移量管理,Barrier在数据流动中的作用,以及Sink端的预写日志和两阶段提交策略以实现事务一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 水位线的本质     (是用来度量事件时间的)   
    1. 水位线的本质是一个时间戳
    2. 从事件时间里面提取
    3. 默认200ms生成一个,截取的时当前批次里面最大的时间戳
    4. 水位线随着数据流动,是一条特殊的标记
    5. WaterMark是单调递增的,需要保证任务的时间时钟是在前进
  2. Flink是如何实现端到端精确一次消费
    1.  1.4版本之后,在数据提交到外部存储时,如果需要实现精确一次处理,也就是Flink应用从Source端开始到Sink端结束,数据必须经过起始点和结束点,保证所有的记录仅影响内部和外部状态一次。
    2. Source端 : Flink Source 把Kafka的偏移量保存到状态后端。当集群故障时,可以恢复最近一次的CheckPoint 读取出里面的offset 从对应的偏移量开始读取数据。
    3. TransForm阶段 : Flink内部支持精确一次的语义,靠的是checkPoint机制,Flink会在Source端广播一个Barrier,这个Barrier会随着数据流到下游,当下游接收到上游分区所有的Barrier时,会进行CheckPoint把此时状态保存到状态后端(Barrier对齐)
  3. Sink端 
    1. 预写日志,幂等写入,两阶段提交
    2. 预写日志 是Sink端不支持事务,CheckPoint完成之前 将结果都保存到Sink的状态后端,等这一阶段的CheckPoint完成之后,一次性写入
    3. 如果外部系统自身就支持事务(比如MySQL、Kafka),可以使用2PC方式,可以提供百分百端到端的Exactly-Once。
    4. <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值