kafka-python:如何提前检查代理列表是否可用而不是显示错误日志

kafka-python: how to check if broker list available in advance instead of showing error logs

我的代码片段看起来像这样,逻辑是如果经纪人可用则生产者不可用 None。

     try:
        self.producer = KafkaProducer(bootstrap_servers=broker_list)
     except kafka.errors.NoBrokersAvailable:
        self.producer = None

但是,这样的话,如果broker不可用,会打印很多日志。我怎样才能避免这种情况?

2020-03-12 13:42:01 INFO <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]>: connecting to device2:9092 [('192.168.0.102', 9092) IPv4]
2020-03-12 13:42:01 INFO Probing node bootstrap-1 broker version
2020-03-12 13:42:01 ERROR Connect attempt to <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]> returned error 111. Disconnecting.
2020-03-12 13:42:01 INFO <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]>: Closing connection. KafkaConnectionError: 111 ECONNREFUSED
2020-03-12 13:42:01 INFO <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]>: connecting to device2:9092 [('192.168.0.102', 9092) IPv4]
2020-03-12 13:42:01 ERROR Connect attempt to <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]> returned error 111. Disconnecting.
2020-03-12 13:42:01 INFO <BrokerConnection node_id=bootstrap-1 host=device2:9092 <connecting> [IPv4 ('192.168.0.102', 9092)]>: Closing connection. KafkaConnectionError: 111 ECONNREFUSED
2020-03-12 13:42:01 INFO <BrokerConnection node_id=bootstrap-0 host=device1:9092 <connecting> [IPv4 ('192.168.0.101', 9092)]>: connecting to device1:9092 [('192.168.0.101', 9092) IPv4]

实际上,如果无法联系到代理,则认为代理不可用 and/or 他们不响应 ApiVersions 请求。因此,要检查服务器是否处于活动状态,您需要建立连接、发送请求并检查返回的响应是否有效。

但是,简单地检查 _bootstrap_servers_ 的 all 是否可连接可能就足够了 - 这样您就可以快速消除例如防火墙问题。

另一方面,您可以调查这些 类 的日志记录级别。

您可以使用KazooClient 与Zookeeper 建立连接,然后列出集群中可用的broker。