我有一个与Kafka通信的Spring Boot应用程序。
我通过注入环境变量在生产环境中配置此应用程序。
对于kafka,我可以使用环境变量配置大多数内容-引导服务器,ssl信任库位置,ssl信任库密码,组ID,主题,例如:
SPRING_KAFKA_SSL_TRUSTSTORE-LOCATION: "file:/opt/app/jks/totally_real_file.jks"
SPRING_KAFKA_SSL_TRUSTSTORE-PASSWORD: "hunter2"
因为我可以使用环境变量配置ssl密钥库和密码,所以我假设可以配置SSL协议和安全协议;例如:
SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL: "SSL"
SPRING_KAFKA_PROPERTIES_SSL_PROTOCOL: "SSL"
但是,我会假设不正确,因为在此处进行设置时,会出现一条消息:
The configuration 'SECURITY_PROTOCOL' was supplied but isn't a known config
The configuration 'SSL_PROTOCOL' was supplied but isn't a known config
出现更多消息!
Bootstrap broker one:9093 disconnected
Bootstrap broker two:9093 disconnected
Bootstrap broker more_than_two:9093 disconnected
这让我很难过。我搜索互联网。 我找到链接:
Spring Kafka SSL setup in Spring boot application.yml
这没有太大帮助,我想通过环境变量进行配置...
我发现github问题链接(情况越来越糟):
https://github.com/spring-projects/spring-integration-kafka/issues/157
这提供了部分线索。
yml:
spring.kafka.properties.security.protocol: "SSL"
应该可以工作,但不能
yml:
spring:
kafka:
properties:
security.protocol: "SSL"
ssl.protocol: "SSL"
确实有效!但是用环境变量来表示是不可能的。
答案 0 :(得分:0)
我的解决方法是在application.yml中设置以下内容:
spring:
kafka:
properties:
security.protocol: "SSL"
ssl.protocol: "SSL"
我不喜欢这种解决方案,因为它需要我为产品和SIT构建不同的工件。 (SIT Kafka没有启用SSL的事实是另一天要再喝一杯的问题)
答案 1 :(得分:0)
引导不可能考虑所有可能的Kafka属性。有这么多。只支持一个子集作为一流属性。
您可以使用系统属性代替环境变量。
编辑
您可以执行以下操作:
spring:
kafka:
properties:
security.protocol: ${SEC_PROT}
答案 2 :(得分:0)
环境变量名称可能不正确。例如,代替此:
SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL
我认为您想使用生产者/消费者特定的名称,例如:
SPRING_KAFKA_PRODUCER_PROPERTIES_SECURITY_PROTOCOL
或
SPRING_KAFKA_CONSUMER_PROPERTIES_SECURITY_PROTOCOL