【问题标题】:Why do I get Intermittent "NoBrokersAvailable" errors, with python application (kafka-python Producer)?为什么我会在 python 应用程序(kafka-python Producer)中出现间歇性“NoBrokersAvailable”错误?
【发布时间】:2022-07-10 02:12:04
【问题描述】:

我正在尝试与 AWS 上的 Kafka 建立连接。通过 TLS 进行通信。
使用的是Kafka-python==2.0.2,KafkaProducer配置如下:

From Kafka import KafkaProducer 

producer = KafkaProducer(
    bootstrap_servers=boostrap_servers, # I have three brokers in my Kafka cluster.
    security_protocol='SSL',
    ssl_check_hostname=False,
    ssl_cafile=ssl_cafile,
    value_serializer=lambda x: json.dumps(x, ensure_ascii=False).encode("utf-8"),
)

我在没有模式的情况下间歇性地遇到 NoBrokersAvailble 错误。一旦出现 NoBrokersAvailable,连接将继续失败。

我已经检查了与 AWS 上的 Kafka 集群连接是否有任何问题:

  • 进行 nslookup 测试以检查 DNS 是否正常工作
  • 在我运行 python 应用程序的同一台服务器上测试了 java 应用程序-Kafka 连接。它运行良好,没有任何错误。
  • 没有防火墙问题

所以这些是我的问题:

  1. 在 Kafka-python 中发现连接失败时的默认重试次数是多少?
  2. 我发现在检查 Kafka 代理的版本时引发了 NoBrokersAvailable 错误;如果我指定我的 API 版本,我将不会收到 NoBrokersAvailable 错误。 但是为什么会时不时出现这个错误,而不是总是?为什么我的 python 应用程序检查版本有时会得到正确的返回值?
  3. 了解要设置的其他一些参数、要检查的服务器设置或任何其他预期错误点会很有帮助。

【问题讨论】:

    标签: python apache-kafka kafka-producer-api kafka-python broker


    【解决方案1】:

    如果子网关联,请检查您的网络 acl。 VPC - 网络 ACL - acl-

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    在我的例子中,我在创建 Producer 实例时指定了 kafka 版本,但我不再看到 NoBrokersAvailable 错误。

    producer = KafkaProducer(bootstrap_servers='localhost:9092',
                                 value_serializer=lambda v: json.dumps(v).encode('utf-8'),
                                 max_request_size=20971520,api_version = (2, 8, 0))
    

    你可以通过运行kafka-topic.sh来获取kafka版本:

    kafka/bin/kafka-topics.sh --version
    

    输出:

    2.8.0 (Commit:ebb1d6e21cc92130)

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2013-09-18
      • 1970-01-01
      • 2013-10-02
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多