web-dev-qa-db-ja.com

SpringBootを使用してkafkaコンシューマー同時実行性を設定する方法

私はJavaベースのKafkaコンシューマーアプリケーションを書いています。私はkafka-clients、Spring KafkaおよびSpringboot for私のアプリケーション。SpringbootではKafka Consumers(ConcurrentKafkaListenerContainerFactory、ConsumerFactoryなどを実際に記述せずに))を簡単に記述できますが、これらのコンシューマーのいくつかのプロパティを定義/カスタマイズできるようにしたいのです。 、Springブートを使用してそれを行う簡単な方法を見つけることができませんでした。たとえば、設定したいプロパティのいくつかは-

ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIGConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG

Spring Bootの事前定義されたプロパティを調べました ここ

また、以前の質問 here に基づいて、コンシューマーで同時実行をセットアップしたいのですが、SpringBootを使用してそれを行うための構成であるapplication.properties駆動の方法が見つかりません。

明らかな方法は、SpringContextでConcurrentKafkaListenerContainerFactory, ConsumerFactoryクラスを再度定義し、そこから作業することです。特にSpringBootを使用しているので、それを行うためのよりクリーンな方法があるかどうかを理解したかったのです。

バージョン-

  • kafka-clients-0.10.0.0-SASL
  • spring-kafka-1.1.0.RELEASE
  • スプリングブーツ-1.5.10.RELEASE
4
user3842182

引用したURLで、下にスクロールして

spring.kafka.listener.concurrency= # Number of threads to run in the listener containers.

spring-kafka-1.1.0.RELEASE

少なくとも1.3.5にアップグレードすることをお勧めします。 KIP-62のおかげで、スレッドモデルがはるかにシンプルになっています。

[〜#〜]編集[〜#〜]

Boot 2.0では、 ブートドキュメントで で説明されているように、任意のプロデューサー、コンシューマー、管理者、共通のプロパティを設定できます。

spring.kafka.consumer.properties.heartbeat.interval.ms

Boot 1.5では、説明されているようにspring.kafka.propertiesのみがあります ここ

これにより、プロデューサーとコンシューマーの両方のプロパティが設定されますが、プロデューサーの未使用/サポートされていないプロパティに関するノイズがログに表示される場合があります。

または、Bootのコンシューマファクトリをオーバーライドして、必要に応じてプロパティを追加することもできます...

@Bean
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
    Map<String, Object> consumerProps = properties.buildConsumerProperties();
    consumerProps.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 5_000);
    return new DefaultKafkaConsumerFactory<Object, Object>(consumerProps);
}
5
Gary Russell

グーグルで検索したところ、 https://github.com/spring-projects/spring-kafka/issues/604 でした。この問題は、 https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#boot-features-kafka-extra-props を引用してクローズされました。ただし、SpringBootバージョン2.0用です。

1
gargkshitiz