2016-12-08 17 views
5

私はカフカと協力してデータを消費しようとしています。下の行から、カフカのデータをポーリングできます。カフカ消費者ポーリングタイムアウト

while (true) { 
    ConsumerRecords<byte[], <byte[]> records = consumer.poll(Long.MAX_VALUE); 
    for (ConsumerRecord<byte[], <byte[]> record : records) { 
     // retrieve data 
    } 
    } 

私の質問は、私は私がタイムアウトとして200提供する場合に比べて、タイムアウトとしてLong.MAX_VALUEを提供することにより、取得しています利点は何かということです。生産を実行するシステムのベストプラクティスは何ですか。

誰でも私にハイタイムアウトとロータイムアウトの違いを説明することができますか、それとも本番システムで使用する必要がありますか?

答えて

2

MAX_VALUEを設定すると、同期メッセージが消費され、ポーリングから何かが返されるまで永遠に待機しますが、低い値に設定すると、待機中以外の何かを行う可能性があります。どちらを使用するかは、実際のシナリオによって異なります。

+0

ありがとうございます。待機するのではなく、より低い価値を設定すると、できることは何ですか?私はこれのためのシナリオを考えることができません。タイムアウト値を低く設定すれば、プロダクションシステムで何ができるのか、それともやるべきなのか理解できますか?あなたは何をお勧めしますか? – john

+0

フラグを使用してループを中断したい場合や、実行するループの外側で定期的な作業をしたい場合。 KafkaConsumerは、コンシューマースレッドを中断するためのウェイクアップメソッドを提供しています。実際には、長いポーリングタイムアウトを使用してもこれを達成できます。 – amethystic

+0

ええ、しかし、私の質問は、長いタイムアウトを待つのではなく、人々がすることは何ですか?人々が大事にするケースはありますか? – john

関連する問題