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

标签 apache-kafka apache-flink

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

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

当禁用检查点时,关于 Kafka 的一切都按预期工作,所以我的假设是它可能与等待 Kafka 提交以便被确认的检查点有关(Semantic 设置为 EXACTLY_ONCE)。我记得读过有关超时不匹配导致问题的文章,所以我将 FlinkKafkaProducer 中的 TRANSACTION_TIMEOUT_CONFIG 调整为 900000 毫秒。

我还按照 this 中的建议调整了 TransactionTimeout 和 MaxBlockMS。问题,现在有很多关于这个完全相同的错误的讨论,但显然没有解决方案。

Flink 书籍“Stream Processing with Apache Flink”建议仔细修改 Kafka 配置,例如ackslog.flush.interval.messageslog.flush.interval.mslog.flush.*。虽然我们已经在 Flink 1.9.1 下工作了,但是自从我们升级到 1.11.1 之后它就不再工作了。我不知道是否有人在此期间触及了 Kafka 设置,但据我所知,大多数设置都保留为默认设置,log.flush.interval=10000 除外。我们像以前一样使用 Confluent 5.3.3,这意味着 Kafka 2.3.1

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

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

最佳答案

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

关于apache-kafka - Flink 检查点不断失败(等待 InitProducerId 时超时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64048913/

相关文章:

java - Kafka在Ubuntu上设置java exe路径问题

node.js - 在 MongoDB 中保存纳秒时间戳(由 Go 生成,使用 Node.js 保存)

docker - 用于Docker Swarm中所有服务的基本镜像中的Avro ?? NiFi-> Kafka-> PostgreSQL

java - Flink - 多源集成测试

apache-flink - 如何在没有 DC/OS 的 Mesos 集群上安装 Flink?

apache-kafka - Python confluent kafka 在代理连接断开时引发异常

apache-kafka - kafka最早和最新的偏移值有什么区别

join - 我可以使用 Flink state 来执行 join 吗?

apache-kafka - Apache Flink 1.4 与 Apache Kafka 1.0.0

apache-flink - 对于动态扩展 flink 作业有什么想法吗?