分别说明了Kafka控制台生产者和使用者中的--broker-list选项和--bootstrap-server选项

时间:2018-12-14 21:16:18

标签: apache-kafka

在Kafka-console-producer中,--broker-list包含服务器列表。 生产者是否连接到所有人? (要么) 生产者是否使用服务器列表连接其中一台服务器,如果该服务器出现故障,则切换到下一个,依此类推?

类似地,在Kafka-console-consumer中,--bootstrap-server列出了Kafka服务器的列表。如果有两个Kafka服务器,是否需要在--bootstrap-server中同时指定两个服务器? 我尝试使用一台服务器(Kafka-server1)运行使用者,当我停止Kafka-server1时,它继续接收该主题的数据。

1 个答案:

答案 0 :(得分:1)

他们的行为相同。

如果您查看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 Controller的初始“布尔”连接,该控制器知道给定时间集群中的所有可用代理。优良作法是至少提供3个以确保高可用性。


  

如果有两个Kafka服务器,我是否需要在--bootstrap-server中指定两个服务器?

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

为客户提供的地址可以使用负载均衡器/反向代理向下模拟为单个kafka.your.network:9092地址,但是随后您将引入额外的DNS和网络跃点以找出连接,单身,知名地址。

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

但是,重要的是要认识到所有发送/轮询请求将仅与TopicPartition的单数领导者进行通信,尽管您提供了多少个地址以及一个主题将具有多少个副本。