2017-05-01 15 views
0

私は積極的にポーリングしていないときに消費者を生かしておくための「低コスト」の方法を探しています。つまり、前回の投票の記録を処理していて、消費者の接続がタイムアウトしないようにしています。Kafkaを使って消費者を生かしている

有望に見えるいくつかの機能:各ケースには

これはAPIの非標準的な使用になりますので、私はありませんよ合理的で合理的なアプローチであることを確かめてください。

RE:接続タイムアウトをより高く設定する - I ウェッジが発生すると、コンシューマはタイムアウトになります。私の質問は、レコードのブロックを取り出して別のスレッドが処理している1つのセクションに関係しています。

答えて

1

documentationは、pause()に電話して、積極的にポーリングを行うように提案しているようです。一時停止中にpoll()に電話すると、何も返されません。

メッセージ処理時間が予期しない変化がない場合は、 のいずれのオプションでも十分です。 がメッセージ処理を別のスレッド に移動することで、プロセッサ がまだ動作している間にコンシューマがポーリングを継続できるようにすることをお勧めします。コミットされた のオフセットが実際の位置よりも先に進まないように注意する必要があります。一般的に、 のレコードの処理が完了した後にのみ、自動コミットを無効にし、処理済みオフセットを手動でコミットする必要があります( 必要な配信のセマンティクスに応じて)。 は、スレッドが以前に返されたものを処理し終えるまで、ポーリング から新しいレコードを受け取らないようにパーティションを一時停止する必要があることにも注意してください。

pause()のドキュメントはこれを確認:

が要求されたパーティションからのフェッチ中断。 poll(long)への今後の呼び出しでは、resume(Collection)を使用して がレジュームされるまで、これらのパーティションからのレコードは返されません。このメソッド はパーティションのサブスクリプションには影響しません。特に、自動割り当てが使用されている場合、 はグループの再バランスを引き起こしません。

+0

消費者が**一時停止している間に**ポーリング**を続ける** - これは「キープアライブ」ですか? – ethrbunny

+0

これは私がドキュメントから理解していることです。私はそれが少なくともショットの価値があると言いたい。 – kichik

1

カフカ0.10.1以来、消費者はpoll通話中にハートビートを失うことはなくなりました。これは、別のスレッドでヒアビートを実行します。それがあなたのバージョンならば、何もすることはありません。 KIP-62

関連する問題