我使用FlinkKafkaConsumer来使用kafka并启用检查点。现在,我对偏移量管理和检查点机制有些困惑。
我已经知道flink将开始从消费者组的分区中读取分区。
https://ci.apache.org/projects/flink/flink-docs-stable/dev/connectors/kafka.html#kafka-consumers-start-position-configuration
偏移量将存储到远程fileSystem中的检查点中。
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管理的group-id的偏移量吗?
答案 0 :(得分:1)
如果在没有定义保存点($ bin/flink run -s :savepointPath [:runArgs]
)的情况下再次运行该作业,则flink将尝试从kafka(在较早的版本中从zookeeper)获取消费者组的偏移量。但是,您将丢失flink作业的所有其他状态(如果您有无状态flink作业,这可能是可忽略的)。
我必须承认这种行为非常令人困惑。默认情况下,启动没有保存点的作业就像从零开始。据我所知,只有kafka源代码的实现不同于该行为。如果您想更改该行为,可以将setStartFromGroupOffsets
中的FlinkKafkaConsumer[08/09/10]
设置为false
。此处描述:Kafka Consumers Start Position Configuration
也许值得仔细看看flink的文档:What is a savepoint and how does it differ from checkpoints。
简而言之
检查点:
Checkpoints的主要目的是在意外作业失败的情况下提供一种恢复机制。 Checkpoint的生命周期由Flink管理
保存点:
保存点由用户创建,拥有和删除。他们的用例用于计划的手动备份和恢复
当前正在进行有关如何“统一”保存点和检查点的讨论。在此处找到很多技术细节:Flink improvals 47: Checkpoints vs Savepoints