他们都行动/是相同的。
如果您查看 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 控制器的初始“引导”连接,该控制器了解给定时间集群中所有可用的代理。为高可用性提供至少 3 个是很好的做法。
如果有两个 Kafka 服务器,我需要在 --bootstrap-server 中指定它们吗?
关于有多个地址可供使用,在云环境中,您可能在可用区上有代理,建议每个可用区至少列出 2 个代理,因此 3 个区域总共有 6 个。
可以使用负载平衡器/反向代理将提供给客户端的地址简化为单个kafka.your.network:9092 地址,但随后您将引入额外的 DNS 和网络跃点来确定连接,以便拥有一个,众所周知,地址。
在任何情况下,代理的所有可用地址都将交给客户端,然后在本地缓存。
但是,重要的是要认识到所有发送/轮询请求只会与 TopicPartition 的单一领导者通信,无论您提供多少地址以及主题将拥有多少副本。