在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的单个领导者进行通信。