Python 我是否应该将ZooKeeper节点传递给PyKafka';卡夫卡客户是谁?

Python 我是否应该将ZooKeeper节点传递给PyKafka';卡夫卡客户是谁?,python,apache-kafka,Python,Apache Kafka,PyKafka的Kafka客户端示例显示了传递给客户端构造函数的Kafka节点: from pykafka import KafkaClient client = KafkaClient(hosts="127.0.0.1:9092") 因此,如果我有多个Kafka节点,我可以将它们全部作为主机的一部分传递。但是,由于ZooKeeper知道所有的Kafka节点,因此似乎更好的方法是传递ZooKeeper集群的位置 在这种情况下,最佳做法是什么?PyKafka是否支持将ZooKeeper节点传递给

PyKafka的Kafka客户端示例显示了传递给客户端构造函数的Kafka节点:

from pykafka import KafkaClient
client = KafkaClient(hosts="127.0.0.1:9092")
因此,如果我有多个Kafka节点,我可以将它们全部作为主机的一部分传递。但是,由于ZooKeeper知道所有的Kafka节点,因此似乎更好的方法是传递ZooKeeper集群的位置


在这种情况下,最佳做法是什么?PyKafka是否支持将ZooKeeper节点传递给客户端构造函数?

对于KafkClient,不需要。您可以提供用于连接的kafka主机的逗号分隔列表(此处:)或KazooClient连接字符串(其中包含zookeeper信息、zookeeper的主机和端口)。从_get_metadata()函数的源代码中,集群对象从zookeeper获取代理信息(如果提供了zookeeper主机IP。此处)

对于其他客户端,例如pykafka.balancedconsumer.balancedconsumer,您可能需要提供zookeeper信息()


顺便说一句,请仔细阅读文档,并非java客户端中的所有功能或协议中定义的所有功能现在都在python客户端中实现。

为了稍微澄清这里的讨论:因为PyKafka支持
zookeeper\u hosts
作为
KafkaClient
上的kwarg。这允许用户在实例化客户端时指定zookeeper或kafka节点-
zookeeper\u hosts
在指定时优先于
hosts
。这只是为了方便起见,但除了
BalancedConsumer
之外,任何PyKafka组件都不需要了解zookeeper主机。在
Kafka客户端
实例化期间使用时,
zookeeper\u hosts
仅用于自动发现Kafka代理的主机名。

谢谢!我以前看过这个文档(可能我的问题不太清楚),如果向zookeeper咨询这些信息,而不是在代码或配置文件中复制这些信息,那就太好了。这种担心是没有根据的吗?当建立连接时,PyKafka通常是如何在生产中使用的?@matthewatabet我记得kafka配置文件中有zookeeper信息。所以,我认为客户可以处理这个问题。这取决于您的需要和您选择的客户。顺便说一下,我用过。仔细阅读文档,并非java客户端中的所有功能都是在python客户端中实现的。@matthewatabet在选择客户端和库之前,请仔细阅读文档,并考虑库是否能够支持您需要的功能。例如,组、组内分发算法等。谢谢!在本例中,客户是在我加入项目之前选择的,pykafka的文档不是很清楚。我尝试将zookeeper地址作为主机列表的一部分传入,但得到了一些警告。是的,它确实应该是kafka节点。原因是kafka节点知道整个集群,并将生产者消息重定向到领导者。所以,Zookeeper实际上只在消费者案例中才需要。这就是为什么在实例化kafka客户端时没有提到zk节点的原因。