web-dev-qa-db-ja.com

異なるスレッドによるKafkaプロデューサーの使用

私はkafka私のJavaベースのWebアプリケーションでメッセージをKafkaにプッシュするためのプロデューサーを持っています。ドキュメントによるとkafka =プロデューサーはスレッドセーフです。Kafkaプロデューサーの単一インスタンスを持ち、異なるスレッド(Webリクエスト)で使用できるということですか?私の場合、それぞれがプロデューサーを開いたり閉じたりします。これは問題を作成しますか?またはリクエストごとにプロデューサーを開始する方が良いですか?

12
Bill Goldberg

はい、KafkaProducerはスレッドセーフです。
参照 クラスKafkaProducer

Kafkaクラスターにレコードを公開するKafkaクライアント。

プロデューサーはスレッドセーフであり、最高のパフォーマンスを得るには、通常、すべてのスレッド間で共有する必要があります。

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

13
Shawn Guo

断然最善のアプローチ(SQLクライアント、elasticsearchクライアントなどのほとんどのステートフルクライアントコネクタで一般的です)は、アプリケーションの起動時に単一のインスタンスをインスタンス化し、それをすべてのスレッドで共有することです。アプリケーションのシャットダウン時にのみ閉じる必要があります。

0
ppearcy