Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡夫卡-有什么比poll()更好的方法来收听Java主题?_Java_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

卡夫卡-有什么比poll()更好的方法来收听Java主题?

卡夫卡-有什么比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

我正在尝试用Java创建一个消费者客户端。我意识到poll()函数被贬低了。听卡夫卡的主题有哪些选择

我的代码:

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。更多细节可以通过下面的链接找到。