分析 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