分别对Kafka控制台生产者和消费者中的--broker列表选项和--bootstrap服务器选项进行了说明



在Kafka控制台生产者中,--broker列表采用服务器列表。制作人是否与所有人都有联系?(或(生产者是否使用服务器列表来连接其中一个服务器,如果该服务器失败,则切换到下一个,依此类推?

类似地,在Kafka控制台消费者中,--bootstrap服务器获取Kafka服务器的列表。如果有两个Kafka服务器,我是否需要在--bootstrap服务器中指定这两个服务器?我试着用一台服务器(Kafka-server1(运行使用者,当我停止Kafka.server1时,它继续接收主题的数据。

它们的行为相同。

如果您查看Kafka源代码,您会发现这两个选项都会导致相同的"bootstrap.servers"配置属性

def producerProps(config: ProducerConfig): Properties = {
val props =
if (config.options.has(config.producerConfigOpt))
Utils.loadProps(config.options.valueOf(config.producerConfigOpt))
else new Properties
props ++= config.extraProducerProps
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, config.brokerList) // <---- brokerList is passed as BOOTSTRAP_SERVER

消费者和生产者都将以循环方式连接到所提供的地址列表,以创建与Kafka控制器的初始"boostrap"连接,该控制器知道在给定时间集群中所有可用的代理。为了获得高可用性,最好至少给出3。


如果有两个Kafka服务器,我需要在--bootstrap服务器中指定它们吗?

关于有多个地址可供使用,在云环境中,在可用性区域上可能有代理,建议每个可用性区域至少列出2个代理,因此3个区域共有6个代理。

为客户端提供的地址可以使用负载均衡器/反向代理进行类似化,直到单个kafka.your.network:9092地址,但为了拥有一个已知的地址,您需要引入额外的DNS和网络跃点来计算连接。

在任何情况下,代理的所有可用地址都将交给客户端,然后在本地缓存。

然而,重要的是要认识到,无论您提供了多少地址,主题将有多少副本,所有发送/轮询请求都只能与TopicPartition的单个领导者进行通信。

最新更新