Apache Flink 是一个开源的分布式流处理框架,自 1.11 版本起,Flink 提供了与 Kafka 集成的官方 Connector,使得 Flink 能够消费 Kafka 数据。在 Flink 1.14.4 版本中,确实支持将 Kafka 偏移量保存在外部系统,如Kafka本身,并且可以手动维护这些偏移量。
Flink Kafka Consumer 允许通过不同的设置模式来控制如何从 Kafka 主题中读取数据。例如,使用 setStartFromGroupOffsets()
方法,Flink 将从消费者组上次提交的偏移量开始消费。而 setStartFromEarliest()
则会从主题最早的记录开始消费,丢弃已提交的偏移量。另外,setStartFromLatest()
方法使得 Flink 从最新的记录开始消费。此外,还可以通过 setStartFromTimestamp()
方法指定从某个时间戳开始消费。
如果需要更精细的控制,可以使用 setStartFromSpecificOffsets(specificStartOffsets)
方法,该方法需要一个映射 Map<KafkaTopicPartition, Long>
作为参数,其中包含了每个分区开始的偏移量。
当启动了 Flink 的检查点(Checkpoint)机制时,Flink Kafka Consumer 会自动将偏移量保存在检查点状态中。这意味着,如果发生故障,Flink 可以从最后一个检查点恢复消费,从而确保数据的一致性和可靠性。为此,你可以配置 enableCheckpointing
来启用检查点,并设置 auto.commit.interval.ms
为 Kafka 消费者的自动提交偏移量的间隔。
此外,Flink Kafka Consumer 提供了 setCommitOffsetsOnCheckpoints(true)
方法,用于在每次检查点完成后自动提交偏移量到 Kafka。这确保了 Kafka 中的 committed offset 与 Flink 状态后端中的 offset 保持一致。
不过,值得注意的是,如果 Flink 作业发生了故障,且没有从检查点恢复,而是直接重启,Flink 将尝试从上一次提交的偏移量或配置的偏移量重新开始消费。这种情况下,就需要确保 Kafka 中有可用的偏移量供 Flink 恢复。
综上所述,Flink 1.14.4 版本支持将 Kafka 偏移量保存在外部系统,并可以手动维护这些偏移量,结合检查点机制,可以确保数据的一致性和可靠性。