Flink 中如何保证 Exactly Once?

本文深入探讨了Flink如何实现Exactly Once容错机制,包括内部的Checkpoint功能、barrier对齐策略以及如何在端对端保证一致性。通过周期性Checkpoint保存状态,Flink在数据流中插入barrier来划分数据,确保在故障恢复时从精确的状态点恢复,避免数据重复处理,从而达到Exactly Once。同时,文章分析了FlinkKafkaConsumer在保证Exactly Once中的关键措施,如自动发现新分区和恢复offset。
摘要由CSDN通过智能技术生成

在分布式场景下,我们的应用程序随时可能出现任何形式的故障,例如:机器硬件故障、程序 OOM 等。当应用程序出现故障时,Flink 为了保证数据消费的 Exactly Once,需要有相应的故障容错能力。Flink 是通过周期性 Checkpoint 的方式来实现故障容错,这里使用的是基于 Chandy-Lamport 改进的算法。本节会介绍 Flink 内部如何保证 Exactly Once 以及端对端如何保证 Exactly Once。

Flink 内部如何保证 Exactly Once?

Flink 官网的定义是 Stateful Computations over Data Streams(数据流上的有状态计算),那到底什么是状态呢?举一个无状态计算的例子,比如:我们只是进行一个字符串拼接,输入a,输出a666,输入b,输出 b666。无状态表示计算输出的结果跟之前的状态没关系,符合幂等性。幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。而计算 PV、UV 就属于有状态计算。实时计算 PV 时,每次都需要从某个存储介质的结果表中拿到之前的 PV 值,+1 后 set 到结果表中。有状态计算表示输出的结果跟之前的状态有关系,不符合幂等性,访问多次,PV 会增加。

Flink的 Checkpoint 功能简介
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhisheng_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值