2016-03-24 8 views
2

カフカにメッセージをプッシュするJavaベースのWebアプリケーション用のカフカプロデューサがあります。ドキュメントごとに私はkafkaプロデューサがスレッドセーフであることがわかりました。私はカフカのプロデューサーのインスタンスを1つ持ち、別のスレッド(ウェブリクエスト)で使用することができますが、それぞれが私のケースではプロデューサーを開いたり閉じることができますか?これによって問題が生じるのでしょうか?または、要求ごとにプロデューサを開始する方が良いですか?カフカプロデューサを別のスレッドで使用する

答えて

4

はい、KafkaProducerはスレッドセーフです。
Class KafkaProducer

カフカのクラスターにレコードを発行しカフカクライアントを参照してください。

プロデューサはスレッドセーフであり、一般にすべての スレッドで共有する必要があります。

プロデューサは、 も、 と通信する必要がある各ブローカへのTCP接続として、I/Oを行う単一のバックグラウンドスレッドを管理します。使用後にプロデューサを閉じないと、 リソースがリークします。

+0

以下のシナリオを処理すると、私は疲れました.. 1つのスレッドがプロデューサを開き、別のスレッドがデータを送信する前に閉じます。最初のスレッドで送信を実行すると例外はありますか? –

+0

絶対に例外がスローされます。通常、スプリングコンテキストのようなマイクロコンテナを使用し、スプリングコンテキストを破棄する場合にのみカフカ消費者を閉じます。 –

0

これは、アプリケーションの開始時に単一のインスタンスをインスタンス化し、すべてのスレッドで共有することです(これは、ステートフルなクライアントコネクタ(SQLクライアント、elasticsearchクライアントなど)の典型です)。アプリケーションのシャットダウン時にのみ閉じる必要があります。

関連する問題