在spring-boot(版本2.1.4)应用程序中,需要将apache-kafka迁移到spring-kafka。 当前的kafka消费者会: 1)在应用程序启动时初始化KafkaConsumer bean 2)主题分区设置为“ 0” 3)使用apache kafkaConsumer将数据轮询到ConsumerRecord中 4)应用程序本身具有Retry机制,可以等待并再次轮询直到max_retry
旧代码如下:
while (!done.get()) {
ConsumerRecords<byte[], <byte[]> records = kafkaConsumer.poll(<MAX_VALUE>);
if (records.isEmpty()) {
retryCount++;
Thread.sleep(<some_time>);
} else {
// Process records;
}
if (retryCount > <max_retry_count>) {
done.set(true);
}
}
尝试以下方法: 1)使用spring kafka批注(@KafkaListener),但是它不能让我们控制轮询。 2)创建“ ConcurrentMessageListenerContainer”,setupMessageListener将记录添加到队列中以进行轮询。这使我们可以控制消费者。
我想知道,我正在朝正确的方向前进吗? 使用spring-kafka可以达到上述要求的更好解决方案是什么?
答案 0 :(得分:0)
不清楚“对消费者的控制”是什么意思。创建容器与使用@KafkaListener
相同(在封面下创建一个容器)。
Spring使用“消息驱动”方法。
您可以设置idleEventInterval
,如果在此期间未收到任何记录,则容器将发布ListenerContainerIdleEvent
。您可以使用ApplicationListener
bean或@EventListener
方法来监听这些事件。