我们有一个流作业,它有20个独立的管道,每个管道都有一个/多个Kafka主题源。
当我们使用一个新jar (我又添加了一个管道)和AllowNonRestoredState=true重新启动作业时,我们注意到从检查点恢复Operatorstate的奇怪行为。
org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase [] - Consumer subtask 0 has no restore state.恢复其操作符状态,因为这个Kafka使用者偏移量被设置为所有分区的最早的。Flink版本:1.13.0
这在弗林克是个已知的问题吗?
注:在某些情况下,我们在两个不同组的管道中有相同的主题。根据我的理解,这不应该影响任何国家恢复,因为卡夫卡联盟国家是在每个卡夫卡消费者来源的管道。
发布于 2022-03-08 12:45:37
因为您没有显式地为操作符提供UID,所以您依赖于自动生成的UID。这些只有在作业的拓扑保持不变的情况下才是稳定的。当您添加一个新管道时,这可能会更改一些或所有以前自动生成的UID,并使该状态无法恢复。
如果要确保能够还原状态,请在所有有状态运算符上设置UID。有关详细信息,请参阅Flink的生产准备检查表。
如果希望显式设置与当前自动生成的UID相匹配的UID,以便安全地改进作业,则可以通过REST检查正在运行的作业(每个操作符的vertexId是其哈希UID),为每个操作符查找哈希UID。然后,您可以将这些散列UID与setUidHash()结合使用在代码中的相同运算符上。参见Flink文档中的匹配算子状态。
https://stackoverflow.com/questions/71395164
复制相似问题