生产消息时,是否需要指定所有Kafka broker的IP地址?

3

我有一个由3个kafka代理和3个zookeeper组成的集群。

我的问题是,如果我们在producer-console.sh文件中只需要提供一个IP地址,是否像下面这样

/kafka-console-producer.sh --broker-list 192.168.7.110:9092 --topic test

对于所有三个 IP 地址

./kafka-console-producer.sh --broker-list 192.168.7.110:9092,192.168.5.110:9092,192.168.3.111:9092 --topic test

如果我只提供一个IP地址来生产消息,并且该IP地址在一段时间后关闭,会发生什么情况?我是否能够通过该IP地址生产消息,还是必须提供所有IP地址?


欢迎来到StackOverflow。您能否编辑一下问题并提供更好的格式,否则阅读起来会很混乱(同时请注意英文)。 - Gourav
在StackOverflow上与他人交流时,请保持尊重。当问题写得很差,某人没有提供足够的有关问题的信息等情况下,才会进行投票降低问题的排名。我之所以这样做是因为第一个原因,当您编辑问题后,它可以被删除! - Gourav
抱歉,我本可以这样做,但是我的之前的编辑还没有被批准,正在等待批准中。如果它们被批准了,我就会编辑这个问题。但对此我感到抱歉。 - Gourav
好的,我会负责。我已经编辑了这个问题。一旦它被批准,我会点赞的。 - Gourav
1个回答

3
请查看生产者配置文档,其中描述了bootstrap.servers的目的(bootstrap-servers / broker-list是同义词):

用于建立与Kafka集群的初始连接的主机/端口对列表。

客户端将利用所有服务器,而不管在此指定哪些服务器进行引导 - 此列表仅影响用于发现完整服务器集的初始主机。此列表应采用host1:port1,host2:port2,...的形式。

由于这些服务器仅用于初始连接以发现完整的集群成员资格(可能会动态更改),因此此列表无需包含完整的服务器集(尽管您可能希望有多个服务器,以防一个服务器关闭)。

因此,如果您只提供一个IP地址,并且该IP地址被关闭,则当生产者尝试连接时,它将随后失败。但是,您可以例如提供两个 IP地址,以便如果一个失败,生产者仍然可以连接到另一个IP地址。但实际发送消息的代理不受此影响。
请参见这里的答案

这意味着如果我有一个集群并且必须使用所有IP,这将有助于在任何代理出现故障时保持稳定。 - Suraj
2
不需要提供所有的IP地址。您可能需要提供多个IP地址,以确保生产者连接/启动到那个代理IP时处于活动状态。如果列出的所有代理IP都宕机了,您的新生产者将无法连接到集群。 - Kamal Chandraprakash
非常感谢您的答复先生。我已经尝试了一个IP,它很好地工作,但是当该IP从集群中下线时,生产者不会自动连接到另一个leader IP。在这种情况下,我必须传递那个leader IP,以便生产者可以发送数据。 - Suraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接