pykafka的kafkaclient示例显示了传递给客户端构造函数的kafka节点:
from pykafka import KafkaClient
client = KafkaClient(hosts="127.0.0.1:9092")
因此,如果我有多个kafka节点,我可以将它们全部作为主机的一部分传递。但是,由于zookeeper知道所有的kafka节点,因此似乎更好的方法是传递zookeeper集群的位置。
这种情况下最好的做法是什么?pykafka是否支持将zookeeper节点传递给客户端构造函数?
2条答案
按热度按时间v2g6jxz61#
澄清一下这里的讨论:自从这个pull请求之后,pykafka支持
zookeeper_hosts
作为一个夸尔格KafkaClient
. 这允许用户在示例化客户端时指定zookeeper或kafka节点-zookeeper_hosts
优先于hosts
如有规定。这仅仅是为了方便起见,但是-在任何pykafka组件中,除了BalancedConsumer
. 使用时KafkaClient
示例化,zookeeper_hosts
只是用来自动发现Kafka经纪人的主机名。pjngdqdw2#
对Kafka来说,没有必要。您可以提供用于连接的kafka主机的逗号分隔列表(here:httphttp://pykafka.readthedocs.org/en/latest/api/client.html)或kazooclient connect string(其中包含zookeeper信息、zookeeper的主机和端口)。从\u get \u metadata()函数的源代码中,集群对象从zookeeper(如果提供了zookeeper主机IP)获取代理信息。在这里https://github.com/parsely/pykafka/blob/1b2d030b073f276c18fd6b1a64320de58d4d7904/pykafka/cluster.py).
对于其他客户端,例如pykafka.balancedconsumer.balancedconsumer,您可能需要提供zookeeper信息(http://pykafka.readthedocs.org/en/latest/api/balancedconsumer.html).
顺便说一句,请仔细阅读文档,现在并非所有java客户机或协议中定义的功能都在python客户机中实现。