在执行纱线应用终止并再次运行后,是否会从上次偏移恢复



我使用FlinkKafkaConsumer来消费kafka并启用检查点。现在我对偏移管理和检查点机制有点困惑。我已经知道flink将开始从消费者组中读取分区。https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html#kafka-consumers-start-position-configuration偏移量将存储到远程文件系统中的检查点中。https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html#kafka-consumers-and-fault-tolerance

如果我通过执行yarn application -kill appid停止应用程序会发生什么并像./bin flink run ...那样运行启动命令?flink会从检查点或kafka管理的组id中获得偏移吗?

如果您在没有定义保存点($ bin/flink run -s :savepointPath [:runArgs](的情况下再次运行作业,flink将尝试从kafka(在zookeeper的旧版本中(中获取消费者组的偏移量。但你会失去所有其他状态的退缩工作(如果你有一份无国籍的退缩工作,这可能是可以忽略的(。

我必须承认,这种行为相当令人困惑。默认情况下,在没有保存点的情况下启动作业就像从零开始一样。据我所知,只有卡夫卡来源的实现与这种行为不同。如果你想改变这种行为,你可以将FlinkKafkaConsumer[08/09/10]setStartFromGroupOffsets设置为false。这在这里描述:Kafka消费者开始位置配置

值得仔细查看flink的文档:什么是保存点,它与检查点有何不同。

简而言之,

检查点:

检查点的主要目的是在意外作业失败的情况下提供恢复机制。检查点的生命周期由Flink 管理

保存点:

保存点由用户创建、拥有和删除。它们的用例用于计划的手动备份和恢复

目前正在讨论如何"统一"保存点和检查点。在这里找到很多技术细节:Flink改进47:检查点与保存点

最新更新