为什么kafka producer在初始化时使用代理端点而不是zk

smtd7mpg  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(298)

如果我有多个经纪人,我的制片人应该使用哪个经纪人?我需要手动切换代理来平衡负载吗?还有,为什么使用者只需要zookeeper端点而不需要broker端点?
教程中的快速示例:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
btxsgosb

btxsgosb1#

kafka producer api不直接与zookeeper交互。但是,高级使用者api连接到zookeeper以获取/更新每个使用者的分区偏移信息。因此,如果不能连接到zookeeper,consumer api将失败。

niknxzdl

niknxzdl2#

Kafka为每个主题的每个分区设置一个代理作为领导者。领导者负责处理对该分区的读写操作。您不能决定从非领导代理读取或写入。
那么,向kafka控制台生产商提供一个代理或代理列表意味着什么呢?好吧,您在命令行上提供的一个或多个代理只是生产商的第一个联系点。如果您列出的代理不是您需要的主题/分区的负责人,那么您的生产者将获得当前的负责人信息(在kafka speak中称为“主题元数据”),并根据需要重新连接到其他代理,然后再发送写操作。事实上,如果您的主题有多个分区,它甚至可能并行地连接到多个代理(如果分区的前导是不同的代理)。
第二个问题:为什么消费者需要连接的zookeeper列表而不是broker列表?答案是,Kafka的消费者可以在“群体”中进行操作,zookeeper用于协调这些群体(群体如何工作是一个更大的问题,超出了本q的范围)。zookeeper还存储主题的代理列表,因此消费者可以直接从zookeeper中提取代理列表,这使得额外的代理列表有点多余。

oewdyzsn

oewdyzsn3#

以上所有答案在Kafka的旧版本中都是正确的,但随着Kafka0.9的到来,情况发生了变化。
现在,无论是生产者还是消费者,都不再与zookeeper有任何直接的互动。另一件有趣的事情是,在0.9中,kafka消除了高级api和低级api之间的差异,因为两者都遵循统一的消费api。

xwbd5t1u

xwbd5t1u4#

我的制作人应该使用哪个经纪人?
我需要手动切换代理来平衡负载吗?
Kafka在集群上运行,这意味着一组节点,所以在生成任何需要告诉他的信息时 LIST 对于您为应用程序配置的代理,下面是从其文档中提取的一个小注解。
“metadata.broker.list”定义生产者可以在何处找到一个或多个代理来确定每个主题的领导者。这不需要是集群中的完整代理集,但应该至少包括两个代理,以防第一个代理不可用。不必担心找出哪个代理是主题(和分区)的领导者,生产者知道如何连接到代理并请求元数据,然后连接到正确的代理。
希望这能澄清你的一些困惑
还有,为什么使用者只需要zookeeper端点而不需要broker端点
这在技术上是不正确的,因为有两种类型的api可用,高级和低级消费者。
高级使用者基本上会处理大多数事情,如领导者检测、线程问题等,但不会对消息提供太多的控制,而这正是使用其他替代方案的目的简单或低级使用者,在其中您将看到需要提供代理、分区相关的详细信息。
因此,只有在使用高级api时,用户才需要zookeeper端点,如果使用simple,则需要提供其他信息

相关问题