首页 > 解决方案 > 将配置传递给 Kafka 客户端的推荐方法

问题描述

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

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

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

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

标签: javaapache-kafkakafka-consumer-apikafka-producer-api

解决方案


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


推荐阅读