【发布时间】:2019-12-16 23:33:28
【问题描述】:
KafkaProducer、KafkaConsumer 或 AdminClient 需要一些配置才能工作。例如,如果我们不设置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 中。
看起来不是很干净。也许有更好的方法吗?还是我应该坚持使用字符串?
【问题讨论】:
-
就按键而言看起来不错。一项改进是将
localhost:9092之类的值外部化,这样它们就不会在源代码中硬编码。 -
就个人而言,我将所有这些设置移动到类路径上的配置文件中,根本没有将它们放入代码中
标签: java apache-kafka kafka-consumer-api kafka-producer-api