Python 我是否应该将ZooKeeper节点传递给PyKafka';卡夫卡客户是谁?
PyKafka的Kafka客户端示例显示了传递给客户端构造函数的Kafka节点: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节点传递给
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节点的原因。