编译后更改 Kafka Streams 配置

Change Kafka Streams configuration after compilation

我目前正在开发一个小型 Kafka Streams 项目,目标是自动设置 Kafka 集群和 运行 一个流应用程序。为了方便起见,如果我可以在应用程序的 .java 文件之外设置 bootstrap.servers 属性 ,即使在编译之后也可能的话,这将非常有帮助。

文档中设置属性的唯一方法如下:

import java.util.Properties;
import org.apache.kafka.streams.StreamsConfig;

Properties settings = new Properties();
// Set a few key parameters
settings.put(StreamsConfig.APPLICATION_ID_CONFIG, "my-first-streams-application");
settings.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-broker1:9092");
// Any further settings
settings.put(... , ...);

但是如果我在编写代码时还不知道集群的主机名和端口怎么办?这样做的原因是我想创建一个工具,它采用 Kafka 集群和 Kafka Streams 应用程序的配置参数,然后自动设置所有必要的 VM 和服务并执行应用程序。其他人应该能够使用此工具而无需更改流应用程序的 Java 代码。

有什么想法吗?我想到的唯一其他选择是解析代码并更改 属性。如果可能的话,我不想对未知代码这样做...

是的,您可以随时将经纪人和其他配置作为 运行时间配置。事实上,这是将代码与集群配置分离的最佳实践,因为这些配置可能会发生变化。您可以使用所有 运行 时间参数创建 application.propertiesapplication.yaml 文件。

1.(带springboot)application.yaml例子:

  application-id: my-application1
  bootstrap-servers:  server1:9092,server2:9092
  schema-registry-url: http://localhost:8081
  default-key-serde: String
  default-value-serde: JsonNode
  auto-offset-reset: earliest
  default-state-dir: /data/state
  num-threads: 4

并添加代码以按以下方式读取属性:
https://www.mkyong.com/spring-boot/spring-boot-configurationproperties-example/

如果您正在使用 spring 引导项目,您可以 运行 您的 jar 按以下方式 application.yaml

java -jar myjar.jar --spring.config.location=path-to-yaml-file

2。 (没有Spring)application.properties

java -cp ... -Dmy.app.properties=/path/to/app.properties mypackage.myclass

然后您可以阅读系统属性。

String propertiesPath = System.getProperty( "app.properties" );
final Properties myProps;
if ( propertiesPath != null ){
     final FileInputStream in = new FileInputStream( propertiesPath );
     try{
         myProps = Properties.load( in );
     }finally{
         in.close( );
     }
}