3

Kafkaトピックを正常に読み取り、各メッセージを画面に出力するこのコードを見つけました。画面に印刷するだけでなく、文字列に対して他の操作を実行するように拡張したいと思います。このために、メッセージを反復する while ループで何が起こっているのかを理解したいと思います。it.hasNext() は何をしますか? 次のメッセージまたは新しいメッセージのリストを探しますか。このwhileループから抜け出すのはいつですか?

import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;

public class ConsumerTest implements Runnable {
    private KafkaStream m_stream;
    private int m_threadNumber;

    public ConsumerTest(KafkaStream a_stream, int a_threadNumber) {
        m_threadNumber = a_threadNumber;
        m_stream = a_stream;
    }

    public void run() {
        **ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
          while (it.hasNext())**
            System.out.println("Thread " + m_threadNumber + ": " + new String(it.next().message()));
           System.out.println("Shutting down Thread: " + m_threadNumber);
    }
}
4

2 に答える 2

2

通常、Kafka iterator .hasNext() メソッドは常に true を返します。したがって、標準操作のループの外に出ることはありません。ただし、例外が発生した場合は false を返し、フェッチを停止することがあります。

そのため、通常はループに入り、消費するメッセージがあるまで it.next() の呼び出しが実際にブロックされ、その場合はメッセージが返されます。

于 2015-05-29T07:42:36.860 に答える