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

时间:2020-09-24 14:46:11

标签: apache-kafka apache-flink

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

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

在禁用检查点时,有关Kafka的所有操作均按预期方式工作,因此我认为可能与检查点等待Kafka提交以便被确认有关({Semantic设置为{{1} })。我记得曾读过有关导致问题的超时不匹配的信息,所以我将FlinkKafkaProducer中的EXACTLY_ONCE调整为TRANSACTION_TIMEOUT_CONFIG毫秒。

我还根据this问题中的建议对TransactionTimeout和MaxBlockMS进行了调整,该问题现在就这个完全相同的错误进行了很多讨论,但显然没有解决办法。

Flink的“使用Apache Flink进行流处理”一书建议仔细修改Kafka配置,例如900000ackslog.flush.interval.messageslog.flush.interval.ms。虽然我们已经在Flink 1.9.1下进行了此工作,但是由于我们已升级到1.11.1,因此不再起作用。同时,我不知道是否有人触摸过Kafka设置,但据我所知,除log.flush.*以外,大多数设置都保留为默认设置。我们像以前一样使用Confluent log.flush.interval=10000,这意味着Kafka 5.3.3

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

有人知道导致这些检查点失败的原因吗?

1 个答案:

答案 0 :(得分:0)

在对此感到头疼之后,我终于找到了一个问题:实际上,由于transaction.state.log.replication.factor低于transaction.state.log.min.isr,Kafka设置实际上已经改变了,导致没有交易真正成功,因为Kafka主题的同步副本永远不够。