卡夫卡生产者为什么不能使用--bootstrap-server标志?

时间:2019-01-13 10:18:54

标签: apache-kafka

我试图了解Apache Kafka中--broker-list--bootstrap-server标志之间的区别。

使用kafka命令行工具时(如quickstart中所述):

  • kafka-console-producer.sh需要--broker-list标志
  • kafka-console-consumer.sh需要--bootstrap-server标志

为什么生产者不能使用bootstrap-server,而是需要“手动”提供经纪人列表?引导服务器是否应该返回生产者可以连接的所有代理的元数据?

2 个答案:

答案 0 :(得分:2)

如果您转到kafka.tools.ConsoleProducer源代码(由bash脚本调用的程序),您将看到:

  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

内幕--broker-list映射到bootstrap.server属性。 我认为这是向后兼容。

摘要:两个标记--broker-list--bootstrap-server都映射到相同的属性

答案 1 :(得分:2)

为了向后兼容,只是名称不同而已,但实际上它们是相同的。当您将--broker-list与控制台生产者一起使用时,您不需要提供所有代理的完整列表,而只需提供至少一个即可。因此这是一个引导服务器列表,适用于控制台使用者。