flink如何初始化kafka数据源的消费偏移

背景

我们知道在日常非flink场景中消费kafka主题时,我们只要指定了消费者组,下次程序重新消费时是可以从上次消费停止时的消费偏移开始继续消费的,这得益于kafka的_offset_主题保存的关于消费者组和topic偏移位置的具体偏移信息,那么flink应用中重启flink应用时,flink是从topic的什么位置开始消费的呢?

flink对kafka主题消费偏移的处理

首先,当flink应用第一次启动时,flink默认会使用程序中设置的偏移位置(比如正常是从topic的最新偏移位置)开始消费的,那么当flink从故障中恢复过来时,flink又是从topic的什么位置开始消费消息的呢?其实这里要分情况:

情况一:假设flink中是开启了检查点配置的,也就是检查点中会保存着故障前的topic消费偏移,那么flink从故障中恢复后会从检查点中保存的topic偏移位置开始消费,记住是从检查点中保存的消费偏移位置开始消费,不是从崩溃前一刻的消费偏移开始消费

情况二: flink没有开启检查点的配置,也就是flink没有保存任何包括kafka 主题的偏移位置之类的状态信息,那么重新启动flink时它的表现和第一次启动flink的表现一样,也就是由程序中设置的偏移位置决定(比如正常是从topic的最新偏移位置)开始消费

其实,第一种情况让人容易理解,比较让人难以理解的是情况二,我们很容易的自以为flink 会从它上一次消费到的偏移位置开始消费,毕竟kafka的_offset__主题中保存着消费者组和各个topic的消费偏移的信息。但是结论是,flink没有这么做,他的行为会和首次启动时的一样。

你可能感兴趣的:(kafka,flink,flink,kafka,大数据)