Flink检查点不断失败(等待InitProducerId时超时)



在挖掘了许多SO帖子甚至JIRA问题后,我不知道该去哪里找了。Flink中的每个检查点都会因超时而失败,在作业的异常部分显示以下错误,但作业本身不会失败:

org.apache.kafka.common.errors.TimeoutException: Timeout expired after 600000milliseconds while awaiting InitProducerId

禁用检查点时,与Kafka有关的一切都按预期工作,因此我的假设是,这可能与检查点等待Kafka提交以得到确认有关(Semantic设置为EXACTLY_ONCE(。我记得读到关于超时不匹配导致问题的文章,所以我将FlinkKafkaProducer中的TRANSACTION_TIMEOUT_CONFIG900000毫秒对齐。

正如本期文章中所建议的,我还调整了TransactionTimeout和MaxBlockMS,目前有很多关于这个完全相同的错误的讨论,但显然没有解决方案。

Flink的书;使用Apache Flink的流处理";建议仔细修改Kafka配置,例如ackslog.flush.interval.messageslog.flush.interval.mslog.flush.*。虽然我们已经在Flink 1.9.1下运行了,但自从我们升级到1.11.1后,它就不再运行了。我不知道是否有人同时触摸了Kafka设置,但据我所知,除了log.flush.interval=10000之外,大多数设置都是默认的。我们像以前一样使用Confluent5.3.3,意思是Kafka2.3.1

此外,Flink作业部署在单节点环境中,因此它应该可以访问文件系统,整个目录由运行Flink服务的用户所有(这是另一个so线程中建议的解决方案(。

有人知道这些检查站失败的原因吗?

在为此头疼不已之后,我终于发现了问题:Kafka设置实际上发生了更改,因为transaction.state.log.replication.factor低于transaction.state.log.min.isr,导致没有事务真正成功,因为Kafka主题的同步副本永远不够。

最新更新