2017-04-10 2 views
0

カフカAPI 0.10.1:LinkKafkaProducer onCompletion()コールバックは常に同じスレッドで実行されますか?

onCompletionコールバックが同じスレッドで順番に呼び出される保証はありますか?ドキュメンテーションは、 "コールバックは一般的にプロデューサのI/Oスレッドで実行されることに注意してください"と言います。だから私はないと思うだろう。

たとえば、整数カウンタを保持することによって発生した例外の数を追跡したい場合は、AtomicIntegerを使用する必要がありますか?

最後のコールバックで例外が発生したかどうかを追跡するブーリアンフラグを保持したい場合は、それを揮発性にする必要がありますか?

答えて

0

onCompletionコールバックが同じスレッドで順次呼び出される保証はありますか?ドキュメンテーションは、 "コールバックは一般的にプロデューサのI/Oスレッドで実行されることに注意してください"と言います。だから私はないと思うだろう。

一般的には、たとえば、デフォルトでは、複数の飛行依頼が並行して行われます。リトライ回数にも依存します(デフォルトは再試行ではありません)。

たとえば、整数カウンタを保持することによって発生した例外の数を追跡したい場合は、AtomicIntegerを使用する必要がありますか?

スレッド書き込みは1つだけです。そう厳しくはない。読んでいるスレッドはアップデートを "見逃している"かもしれませんが、あなたはこのアップデートを後で読むでしょう。私は、例外が発生した最後のコールバックでいるかどうかを追跡するブールフラグを保持したい場合は

それとも、私はそれが揮発性にする必要があるでしょうか?

役に立つことがあります。

さらに、コールバックのメインスレッドでブロックして待機することができます。詳細については

、あなたが言っている私は(コールバックを削除し、代わりにfuture.getを行う必要がありますので、 http://docs.confluent.io/current/clients/producer.html#synchronous-writes

+0

を参照してください)? – rents

+0

同期処理をしたい場合は、はい。もちろん、パフォーマンスヒットを伴います。 –

+0

さて、これは実際にはコメントではなく、答えでなければなりません。私は代替物を探しているわけではなく、変数を原子的/揮発性に保つべきかどうかをチェックしたいだけです。 – rents

関連する問題