我写了一个high level Kafka consumer作为java应用程序的一部分。
因此核心代码如下所示:
public void start() {
ConsumerConnector consumerConnector = conf.getConsumerConnector();
String topic = conf.getTopic();
int numOfThereads = conf.getNumOfThreads();
Map<String, Integer> topicCountMap = ImmutableMap.of(topic, numOfThereads);
Map<String, List<KafkaStream<Message>>> topicMessageStreams = consumerConnector.createMessageStreams(topicCountMap);
List<KafkaStream<Message>> streams = topicMessageStreams.get(topic);
// create 4 threads to consume from each of the partitions
executor = Executors.newFixedThreadPool(numOfThereads);
// consume the messages in the threads
for (final KafkaStream<Message> stream : streams) {
executor.submit(new ConsumerThread(stream));
}
}
为了测试我的消费者,我还创建了一个制作人,写信给kafka,然后启动我的消费者,它有效。 由于线程在循环内执行,我不确定我是否正确。 我希望我的消费者能够永远奔跑并继续消费来自kafka的消息。
让它永远运行的正确方法是什么?
答案 0 :(得分:1)
@forhas感谢您确认
基本上从文档中他们迭代消费消息的方式如下所示
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
while (it.hasNext())
System.out.println("Thread " + m_threadNumber + ": " + new String(it.next().message()));
它也说明了这一点
The interesting part here is the while (it.hasNext()) section. Basically this code reads from Kafka until you stop it
..
理想情况下,它应该继续运行,除非我们明确地杀死它,并且一旦产生了新的消息,消费者一方就可以获得相同的信息。