我有一个生产者和消费者的java代码,我试图升级它以连接到使用SSL保护的Kafka。我所处的情况是,与ssl相关的密码只能通过环境变量提供。因此,是否可以直接引用KafkaProducer.properties和KafkaConsumer.properties文件中环境变量引用的值
例如:我在linux系统中声明了一个环境变量SSL_KEY_PASSWORD=密码
在KafkaProducer/Consumer属性中,我声明,"ssl.key.password=${ssl_key_password}">
示例KAFKA消费者/生产者属性文件配置可能看起来像
# For SSL
security.protocol=SSL
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=${TRUSTSTORE_PASS_ENV_VARIABLE}
# For SSL auth
ssl.keystore.location=/var/private/ssl/client.keystore.jks
ssl.keystore.password=${KEYSTORE_PASS_ENV_VARIABLE}
ssl.key.password=${KEY_PASS_ENV_VARIABLE}
不,他们不能。
不清楚您是如何使用这些文件或Kafka客户端的。如果使用shell命令,则应该围绕正在运行的命令创建一个bash包装器,该包装器使用sed
或其他模板脚本来生成文件,然后再运行最终命令。
如果您实际上正在编写Java代码,那么从那里的环境中构建Properties,而不是使用文件。
不要认为属性文件值是插值的,但可能可以测试一次。或者,您也可以从属性文件中删除这些行,并从下面的代码中执行。。。
final Properties properties = new Properties();
final FileInputStream input = new FileInputStream(yourExistingFile);
properties.load(input);
properties.put("ssl.key.password",System.getenv("SSL_KEY_PASSWORD"));//this is additional property