Kafka - 有什么比使用poll()更好的Java主题监听替代方案?

8

我正在尝试用Java创建一个消费者客户端。我意识到poll()函数已经被弃用了。那么有哪些替代方案可以监听Kafka的主题呢?

我的代码:

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());
    }
}

1
在我看来,将一个单独的处理器类包含在Kafka拓扑中更加优雅。 - s_bei
1个回答

14

poll()poll(long) 被弃用的原因是它们可能会无限期地阻塞(即使在第二种情况下指定了超时时间)。这种行为的根本原因是那些方法中的初始元数据更新可能会永远阻塞(请参见此处)。相反,您应该使用KafkaConsumerpoll(Duration) 方法。因此,在您的代码中,您只需将kc.poll(100)替换为kc.poll(Duration.ofMillis(100))


根据Kafka文档,poll方法具有类型为java.time.Duration的timeout参数。更多详细信息可以通过以下链接找到。 https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#poll-java.time.Duration- - Nilucshan Siva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接