将配置传递给Kafka客户端的推荐方法

时间:2019-12-16 12:49:20

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

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_CONFIGProducerConfig中不存在,因此我在定义的地方使用了CommonClientConfigs,但可能的值在SecurityProtocol枚举中。与SSL相关的设置仅在SslConfigs中。

它看起来不太干净。也许有更好的方法吗?还是我应该坚持弦乐?

1 个答案:

答案 0 :(得分:2)

说实话,这种分组对我来说很有意义。 它尝试将生产者,消费者和他们共同的东西的配置参数分组 关于SslConfigs,它提供了所有与SSL相关的配置参数。 安全协议规范是生产者和消费者的通用参数,不仅与SSL有关,甚至可能是PLAINTEXT,因此...“无安全性”。 回到您的特定问题,我总是喜欢使用这些声明而不是硬编码的字符串。 如果其中之一将来会改变其价值,则无需更改客户代码。