首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flink在从检查点开始时无法恢复kafka使用者的操作员状态

Flink在从检查点开始时无法恢复kafka使用者的操作员状态
EN

Stack Overflow用户
提问于 2022-03-08 12:36:03
回答 1查看 218关注 0票数 1

我们有一个流作业,它有20个独立的管道,每个管道都有一个/多个Kafka主题源。

当我们使用一个新jar (我又添加了一个管道)和AllowNonRestoredState=true重新启动作业时,我们注意到从检查点恢复Operatorstate的奇怪行为。

  • 我们当前添加管道的配置是静态的,我们基本上是在进行代码更改以添加任何新管道。
  • 我们没有为任何运营商设置任何UID。
  • 当我们使用来自检查点的相同jar重新启动管道时,我们会看到它恢复了所有操作符状态,而没有任何缺失状态。
  • 对于所有算子,我们都保持了1的并行性。
  • 卡夫卡的一些源操作符无法用日志org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase [] - Consumer subtask 0 has no restore state.恢复其操作符状态,因为这个Kafka使用者偏移量被设置为所有分区的最早的。

Flink版本:1.13.0

这在弗林克是个已知的问题吗?

注:在某些情况下,我们在两个不同组的管道中有相同的主题。根据我的理解,这不应该影响任何国家恢复,因为卡夫卡联盟国家是在每个卡夫卡消费者来源的管道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 12:45:37

因为您没有显式地为操作符提供UID,所以您依赖于自动生成的UID。这些只有在作业的拓扑保持不变的情况下才是稳定的。当您添加一个新管道时,这可能会更改一些或所有以前自动生成的UID,并使该状态无法恢复。

如果要确保能够还原状态,请在所有有状态运算符上设置UID。有关详细信息,请参阅Flink的生产准备检查表

如果希望显式设置与当前自动生成的UID相匹配的UID,以便安全地改进作业,则可以通过REST检查正在运行的作业(每个操作符的vertexId是其哈希UID),为每个操作符查找哈希UID。然后,您可以将这些散列UID与setUidHash()结合使用在代码中的相同运算符上。参见Flink文档中的匹配算子状态

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71395164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档