卡夫卡-有什么比poll()更好的方法来收听Java主题?
我正在尝试用Java创建一个消费者客户端。我意识到poll()函数被贬低了。听卡夫卡的主题有哪些选择 我的代码:卡夫卡-有什么比poll()更好的方法来收听Java主题?,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,我正在尝试用Java创建一个消费者客户端。我意识到poll()函数被贬低了。听卡夫卡的主题有哪些选择 我的代码: KafkaConsumer< String, UserSegmentPayload > kc = new KafkaConsumer<>(props2); kc.subscribe(Collections.singletonList(topicName)); while (true) { ConsumerRecords<String, UserS
KafkaConsumer< String, UserSegmentPayload > kc = new KafkaConsumer<>(props2);
kc.subscribe(Collections.singletonList(topicName));
while (true) {
ConsumerRecords<String, UserSegmentPayload> records = kc.poll(100);
for (ConsumerRecord<String, UserSegmentPayload> record : records) {
System.out.printf("offset = %d, key = %s, value = %s\n",
record.offset(), record.key(), record.value());
}
}
KafkaConsumerkc=newkafkaconsumer(props2);
订阅(Collections.singletonList(topicName));
while(true){
消费者记录记录=千卡民意测验(100);
对于(消费者记录:记录){
System.out.printf(“偏移量=%d,键=%s,值=%s\n”,
record.offset()、record.key()、record.value();
}
}
不推荐使用poll()
和poll(long)
的原因是它们可能会无限期地阻塞(即使在第二种情况下,指定了超时)。这种行为的根本原因是这些方法中的初始元数据更新可能会永远阻塞(请参阅)。相反,您应该使用KafkaConsumer
的poll(Duration)
-方法。因此,在您的代码中,您所要做的就是将kc.poll(100)
替换为kc.poll(Duration.ofMillis(100))
从我的角度来看,包含在Kafka拓扑中的独立处理器类更优雅。根据Kafka文档,poll方法的参数timeout类型为java.time.Duration。更多细节可以通过下面的链接找到。