Flink 中如何保证 Exactly Once?(下)

本文深入分析了 FlinkKafkaConsumer 的设计思想,包括 Kafka offset 存储、负载均衡以及如何在源端并行度改变时恢复 offset。Flink 通过将 offset 保存在 Operator State 中实现容错,使用 getUnionListState 策略确保并行度变化时恢复正确。同时,FlinkKafkaConsumer 支持动态发现新增的 Kafka partition 并进行消费,保证数据不丢失。
摘要由CSDN通过智能技术生成

分析 FlinkKafkaConsumer 的设计思想

FlinkKafkaConsumer 做为 Source,从 Kafka 读取数据到 Flink 中,首先想一下设计 FlinkKafkaConsumer,需要考虑哪些?

  • Flink 中 kafka 的 offset 保存在哪里,具体如何保存呢?任务重启恢复时,如何读取之前消费的 offset?
  • 如果 Source 端并行度改变了,如何来恢复 offset?
  • 如何保证每个 FlinkKafkaConsumer 实例消费的 partition 负载均衡?如何保证不出现有的实例消费 5 个 kafka partition,有的实例仅消费 1 个 kafka partition?
  • 当前消费的 topic 如果动态增加了 partition,Flink 如何实现自动发现并消费?

带着这些问题来看一看 FlinkKafkaConsumer 是怎么解决上述问题的。

Kafka offset 存储及如何实现 Consumer 实例消费 partition 的负载均衡

Flink 将任务恢复需要的信息都保存在状态中,当然 Kafka 的 offset 信息也保存在 Flink 的状态中,当任务从状态中恢复时会从状态中读取相应的 offset,并从 offset 位置开始消费。

在 Flink 中有两个基本的 S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhisheng_blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值