【问题标题】:Recommended way to pass configuration to a Kafka client将配置传递给 Kafka 客户端的推荐方法
【发布时间】:2019-12-16 23:33:28
【问题描述】:

KafkaProducerKafkaConsumerAdminClient 需要一些配置才能工作。例如,如果我们不设置bootstrap.servers,那么它将不知道连接到哪里。

一开始我使用硬编码字符串作为键,然后我转换为ProducerConfigConsumerConfigAdminClientConfig 中定义的常量,这样:

config.put("bootstrap.servers", "localhost:9092")

成为:

config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")

这似乎是一个很好的做法,因为在编译时会发现错误的键。但是,当我想使用稍微不常用的设置时,我需要在各种类之间切换:

config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
config.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, SecurityProtocol.SSL.name)
config.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, "PKCS12")

SECURITY_PROTOCOL_CONFIG 不存在于ProducerConfig 中,所以我在定义它的地方使用了CommonClientConfigs,但可能的值在SecurityProtocol 枚举中。 SSL 相关设置仅在SslConfigs 中。

看起来不是很干净。也许有更好的方法吗?还是我应该坚持使用字符串?

【问题讨论】:

  • 就按键而言看起来不错。一项改进是将localhost:9092 之类的值外部化,这样它们就不会在源代码中硬编码。
  • 就个人而言,我将所有这些设置移动到类路径上的配置文件中,根本没有将它们放入代码中

标签: java apache-kafka kafka-consumer-api kafka-producer-api


【解决方案1】:

说实话,这个分组对我来说有点道理。 它尝试为生产者、消费者和它们共同的事物分组配置参数 关于SslConfigs,它提供了所有与 SSL 相关的配置参数。 安全协议规范是生产者和消费者的通用参数,它不仅仅是关于 SSL,它甚至可能是 PLAINTEXT 所以......“没有安全性”。 回到您的具体问题,我总是更喜欢使用这些声明而不是硬编码字符串。 如果其中之一将来会更改其值,则无需更改客户端代码。

【讨论】:

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