【问题标题】:java kafka-client can't reconnect after broker restart代理重启后java kafka-client无法重新连接
【发布时间】:2019-03-07 18:50:49
【问题描述】:

我在使用 kafka-streams 和 spring-kafka 应用程序时遇到了同样的问题。第一个是使用 kafka-clients:1.0.0 库,而另一个是 1.0.2 版本

kubernetes 中只有一个代理实例在运行 (KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://${POD_IP}:9092")。它是有状态的,它是通过无头服务内部端点从客户端应用程序访问的(尽管我已经尝试过集群 ip 并且问题是一样的)

一旦我删除了这个 kafka pod 并重新创建它,我的客户端应用程序就无法重新连接。 Pod 确实是用另一个 IP 地址重新创建的,但由于我通过服务内部端点访问它,我希望我的客户端应用程序能够解析这个新地址,但它没有发生。

kafka-clients 库正在记录“发现负载最少的节点 [old_ip]:9092 (id: 0 rack: null)”,而此地址上不再运行任何内容

JVM TTL 缓存不是问题,因为我已将其设置为定期刷新。

重启客户端应用解决问题

如果在 KAFKA_ADVERTISED_LISTENERS 中提供 {POD_IP} 会导致此问题,那么提供 pod 的主机名会解决此问题吗?或者有没有办法指导我的客户解析这个新地址?

【问题讨论】:

  • 你解决了这个问题吗?如果您发布后续内容,将对我有所帮助。
  • 嗯,有点。当 java 客户端最初连接到代理时,它会获取 KAFKA_ADVERTISED_LISTENERS 中规定的值并继续使用它来连接到代理。因为我在那里有 {POD_ID},所以它总是 IP 地址。一旦 pod 重新启动并更改了它的 ip 地址,客户端将无法再找到它,因为它继续使用以前的 ip 地址。我的猜测仍然是提供 {POD_HOSTNAME} 而不是 {POD_IP} 可以解决问题,但我从未验证过它,所以我从来没有跟进

标签: kubernetes apache-kafka


【解决方案1】:

好像和KAFKA-7755有关。将客户端版本更新到 2.2.0 / 2.1.1 应该会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多