代码之家  ›  专栏  ›  技术社区  ›  Chobeat

PyKafka元数据(字节而非字符串)

  •  5
  • Chobeat  · 技术社区  · 6 年前

    我看到PyKafka有一种不寻常的行为,这是我最近刚开始使用的一个客户。

    错误如下:

    Failed to connect newly created broker for b'4758e4ee1af6':9092
    {0: <pykafka.broker.Broker at 0x7f319e19be10 (host=b'4758e4ee1af6',port=9092, id=0)>}
    

    错误的来源如下:

        self.client = KafkaClient(hosts=BROKER_ADDRESS, broker_version="0.10.1.0")
    consumer = self.client.topics[bytes(self.input_topic,"UTF-8")].get_balanced_consumer(
            consumer_group=bytes(self.consumer_group,"UTF-8"),
            auto_commit_enable=True
        )
    

    调试时,我看到客户端使用正确的字符串IP连接到种子代理,但当检索到代理列表时,它们的IP是二进制的,当PyKafka尝试再次连接以创建消费者时,这些IP显然不起作用。

    另一个可能与此相关的问题是,我需要自己将主题名称和消费者组名称转换为字节(与其他客户端一样),但文档中的所有示例都显示了字符串的用法。

    Kafka broker版本:0.10.1.0 PyKafka版本:2.7.0

    2 回复  |  直到 6 年前
        1
  •  3
  •   Chobeat    6 年前

    好吧,我完全被误导了:那不是IP,而是base64中的主机名(由Docker生成)。

        2
  •  1
  •   Emmett Butler    6 年前

    检查您的经纪人 advertised.listeners 配置-它定义在pykafka的 Cluster 初始化。Docker可能正在破坏此信息,因此您需要使用 已发布。侦听器 documentation :

    要发布到ZooKeeper以供客户端使用的侦听器(如果与 listeners config属性。在IaaS环境中,这可能需要与代理绑定到的接口不同。

    至于字节/字符串问题 latest development release pykafka的接受字符串 主题和使用者组名称的字节,以方便程序员使用。对于旧版本,需要使用以下技术将字符串参数转换为字节:

    topic_name = str_topic_name.encode('ascii')