【问题标题】:Kafka bootstrap setting precedence between cli option and configuration filecli选项和配置文件之间的Kafka引导设置优先级
【发布时间】:2021-03-09 07:10:33
【问题描述】:

我用它来消费数据:

kafka-console-consumer.sh --bootstrap-server kafka01:9092 --topic 测试 --consumer.config /test/kafka/config/consumer.properties

consumer.properties 文件具有以下设置:

[...]

bootstrap.servers=kafka01:9092,kafka02:9092,kafka03:9092

[...]

所以我问的是 bootstrap.server 的优先级是什么?最终的引导服务器将是什么? :

只有 kafka01:9092(使用参数“--bootstrap-sever”指定)?或者 kafka01:9092,kafka02:9092,kafka03:9092 在 consumer.properties 文件中指定?

谢谢!

【问题讨论】:

  • 您可以通过在 --bootstrap-server 配置中提供错误的服务器地址来测试这一点。
  • 好主意,谢谢!会看看
  • 您也可以查看源代码,但我猜配置文件会覆盖所有其他选项

标签: apache-kafka kafka-consumer-api


【解决方案1】:

源代码以及我们拥有的ConsoleConsumer 中也确认了答案

private[tools] def consumerProps(config: ConsumerConfig): Properties = {
val props = new Properties
props ++= config.consumerProps
props ++= config.extraConsumerProps
setAutoOffsetResetValue(config, props)
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, config.bootstrapServer)
CommandLineUtils.maybeMergeOptions(
  props, ConsumerConfig.ISOLATION_LEVEL_CONFIG, config.options, config.isolationLevelOpt)
props}

如您所见,它首先使用通过配置文件提供的consumerProps,然后使用作为命令行参数提供的extraConsumerProps,如下定义:

val extraConsumerProps = CommandLineUtils.parseKeyValueArgs(options.valuesOf(consumerPropertyOpt).asScala)
val consumerProps = if (options.has(consumerConfigOpt))
  Utils.loadProps(options.valueOf(consumerConfigOpt))
else
  new Properties()

【讨论】:

  • 更新:您的回答与我的测试相矛盾:它应该可以工作,因为我的配置文件有有效的 kafka 引导服务器......或者版本之间的行为发生了变化?
【解决方案2】:

根据 mike 的建议,我在 --bootstrap-sever 中提供了错误的地址,Kafka 显示警告:无法解析 错误 服务器

所以问题已回答,配置文件不优先于选项的 cli 参数

--引导服务器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多