2017-05-18 16 views
0

マルチスレッド機能(ConcurrentKafkaListenerContainerFactory)でスプリングカフカを使用すると、次のような2種類のスレッド名が見つかりました: 1.#0-1-kafka-consumer-1 2 #0-1-kafka-listener-3スプリングカフカの消費者とリスナーを理解する方法

この2種類のスレッドはどうやって理解できますか?彼らの間の関係は何ですか? ありがとうございます!

答えて

1

コンシューマスレッドは、メッセージのためにKafkaConsumerをポーリングし、リスナを呼び出すリスナスレッドに渡します。

これは遅いリスナーがパーティションの再調整を引き起こす可能性があるため、KafkaConsumerの初期バージョンで必要でした。つまり、コンシューマスレッドでハートビートを送信する必要がありました。

これは、KafkaConsumer(ハートビートはバックグラウンドで送信される)で修正されました.2.0では、スレッドタイプは1つしかなく、リスナはコンシューマスレッドで呼び出されます。 2.0.0.M2(マイルストーン2)は現在利用可能です。このリリースは来月末頃に予定されています。

+0

こんにちはゲーリー、再びあなたを見てうれしい!私は基本的な疑問を持っています。もし、partitionAとpartionBの両方がconsumerAに割り当てられていたら、consumerAは同時にそれらを消費しますか?または、最初にpartionAのすべてのmsgを消費し、次にpartitionBのmsgを消費しますか? –

+0

それはカフカの人々のための質問です。私は彼らの内部アルゴリズムを知らない。 –

0

以前のKafkaバージョン(< 0.10.1)では、遅いリスナーを持つ苦痛でした。死んでいると考えられていた非アクティブな消費者スレッド、したがって再調整が行われました。そのため、スレッドハンドを導入し、リスナーで処理するレコードを別のスレッドに渡すのはこのためです。したがって、これらのスレッド接頭辞はまさにそれです。

最新のバージョン2.0では、Kafka 0.10.2に基づいて、Kafkaクライアント自体で正しくハートビートが発生するため、このロジックを削除しました。したがって、遅いリスナーについてはもう心配する必要はありません。すべてのものが消費者のスレッド上で動作します。

+0

私は「スローリスナー」とは何かを説明することができます2.消費者スレッドとリスナースレッドの間の関係は1:1で、それは正しいですか? –

関連する問題