私はkafka私のJavaベースのWebアプリケーションでメッセージをKafkaにプッシュするためのプロデューサーを持っています。ドキュメントによるとkafka =プロデューサーはスレッドセーフです。Kafkaプロデューサーの単一インスタンスを持ち、異なるスレッド(Webリクエスト)で使用できるということですか?私の場合、それぞれがプロデューサーを開いたり閉じたりします。これは問題を作成しますか?またはリクエストごとにプロデューサーを開始する方が良いですか?
はい、KafkaProducerはスレッドセーフです。
参照 クラスKafkaProducer
Kafkaクラスターにレコードを公開するKafkaクライアント。
プロデューサーはスレッドセーフであり、最高のパフォーマンスを得るには、通常、すべてのスレッド間で共有する必要があります。
プロデューサーは、I/Oを実行する単一のバックグラウンドスレッドと、通信する必要のある各ブローカーへのTCP接続を管理します。使用後にプロデューサーを閉じないと、これらのリソースがリークします。
断然最善のアプローチ(SQLクライアント、elasticsearchクライアントなどのほとんどのステートフルクライアントコネクタで一般的です)は、アプリケーションの起動時に単一のインスタンスをインスタンス化し、それをすべてのスレッドで共有することです。アプリケーションのシャットダウン時にのみ閉じる必要があります。