java - 将配置传递给 Kafka 客户端的推荐方法
问题描述
AKafkaProducer
或KafkaConsumer
anAdminClient
需要一些配置才能工作。例如,如果我们不设置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
。
它看起来不是很干净。也许有更好的方法吗?还是我应该坚持使用字符串?
解决方案
老实说,这个分组对我来说有点意义。它尝试为生产者、消费者和它们共同的事物分组配置参数关于SslConfigs
它提供所有与 SSL 相关的配置参数。安全协议规范是生产者和消费者的通用参数,它不仅仅是关于 SSL,它甚至可能是 PLAINTEXT 所以......“没有安全性”。回到您的具体问题,我总是更喜欢使用这些声明而不是硬编码字符串。如果其中之一将来会更改其值,则您无需更改客户端代码。
推荐阅读
- python - 如何在循环中使用变量,用于嵌套列表
- asp.net-mvc - 使用 cshtml razor 从另一个控制器获取值
- swift - 无法从 Catalina 上的 Today 小部件启动包含应用程序
- r - 如何对由多个分组变量分隔的个体进行多个变量的方差分析?
- php - mgp25 Instagram-API 无法再上传
- java - 为什么我的 while 循环会导致 java 控制台不出现?
- java - HashTable 和 LinkedList 的 LinkedHashSet 实现?
- c - 在 int 列表中弹出不需要的元素
- go - 无法处理 goroutine 死锁
- reactjs - 如何动态选择 Material-UI 自动完成组件中的默认选项?