当 Kafka 作为数据源时,我对 Apache Flink 如何处理提交偏移有点困惑。
我已经配置了消费者组,可以正常消费消息并提交消息(因为我在 flink 上启用了检查点)。但是当我在 k8s 上重新启动部署时,即使消费者的 LAG 为零,所有消息也会再次被消费。似乎 flink 只是忽略了消费者提交偏移量。
我读了一些相关内容,似乎需要在某处存储状态,但我不明白如果我已经提交了偏移量,为什么还需要它。
当 Kafka 作为数据源时,我对 Apache Flink 如何处理提交偏移有点困惑。
我已经配置了消费者组,可以正常消费消息并提交消息(因为我在 flink 上启用了检查点)。但是当我在 k8s 上重新启动部署时,即使消费者的 LAG 为零,所有消息也会再次被消费。似乎 flink 只是忽略了消费者提交偏移量。
我读了一些相关内容,似乎需要在某处存储状态,但我不明白如果我已经提交了偏移量,为什么还需要它。
Flink 自行进行偏移管理,以便有效地保证精确一次语义。Flink/Kafka 连接器在完成每个检查点时将偏移提交回 Kafka —— 但这是为了方便用户。Flink 不依赖于存储在代理中的偏移。
Flink 和 Kafka 的 Exactly-once 要求从检查点或保存点中保存的偏移量恢复。否则,Flink 将从您为消费者配置的任何偏移量开始。
Kafka 连接器文档在这里。
有关 Flink 如何与 Kafka 实现 Exactly-Once 的更多信息,请参阅https://www.youtube.com/watch?v=YEsP9zW1h10