Изменить конфигурацию Kafka Streams после компиляции - PullRequest
0 голосов
/ 21 января 2019

В настоящее время я работаю над небольшим проектом Kafka Streams с целью автоматической настройки кластера Kafka и запуска на нем приложения потоков.Для удобства было бы очень полезно, если бы я мог установить свойство bootstrap.servers вне файла .java приложения, если это возможно даже после компиляции.

Единственный способ задания свойств в документации заключается в следующем:

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, чтобы затем автоматически настроить все необходимые виртуальные машины и службы и запустить приложение.Кто-то другой должен иметь возможность использовать этот инструмент без необходимости изменения кода Java потокового приложения.

Есть идеи?Единственный другой вариант, который я имею в виду, - это разбор кода и изменение свойства.Если возможно, я бы не хотел этого делать с неизвестным кодом ...

1 Ответ

0 голосов
/ 21 января 2019

Да, вы всегда можете сделать посредников и другие конфигурации в качестве конфигурации времени выполнения. Фактически, это лучшая практика для разъединения кода с конфигурацией кластера, поскольку эта конфигурация может быть изменена. Вы можете создать файл application.properties или application.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/

Если вы используете весенний загрузочный проект, вы можете запустить jar следующим образом с application.yaml

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

2. (Без весны) 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( );
     }
}
...