Flink如何保证端到端的一致性

1、流数据处理的容错语义

  • 1、At most once --最多一次, 也就是说数据最多被处理一次,有可能会丢失
  • 2、At least once --至少一次, 也就是说数据至少会被处理一次,有可能会重复
  • 3、Exactly-Once --精准一次, 也就是说数据只会被处理一次,不会丢也不会重复,注意: 更准确的理解应该是只会被正确处理一次而不是仅一次

2、Flink如何支持End-to-End Exactly-Once

  • 1、Source: offset+Checkpoint: 需要数据源支持offset维护,如Kafka(offset) + Flink(使用Checkpoint维护offset)
	FlinkKafkaConsumer<T> extends FlinkKafkaConsumerBase
	FlinkKafkaConsumerBase<T>  implements CheckpointedFunction
	源码中就记录了主题分区和offset信息
	ListState<Tuple2<KafkaTopicPartition, Long>> unionOffsetStates
	initializeState方法和snapshotState方法
  • 2、Transformation:Checkpoint
	flink是有状态的流计算,即所有的状态都会被记录到checkpoint中,如sum、reduce、maxby
  • 3、Sink:两阶段事务提交+Checkpoint
	Flink+Kafka, Kafka是支持事务的,所以可以使用两阶段事务提交来实现
	FlinkKafkaProducer<IN> extends TwoPhaseCommitSinkFunction
	beginTransaction
	preCommit
	commit
	abort

3、两阶段事务提交协议

  • 1、一旦 Flink 开始做 checkpoint 操作,那么就beginTransaction开启事务会进入 pre-commit “预提交”阶段,同时JobManager的Coordinator 会将 Barrier 注入数据流中
  • 2、当所有的 barrier 在算子中成功进行一遍传递(就是Checkpoint完成),并完成快照后,则“预提交”阶段完成;
  • 3、等所有的算子完成“预提交”,就会发起一个commit“提交”动作,但是任何一个“预提交”失败都会导致 Flink 回滚到最近的 checkpoint(abort终止事务);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值