将Apache Kafka轮询迁移到Spring Kafka

时间:2019-04-15 06:43:58

标签: spring-kafka

在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可以达到上述要求的更好解决方案是什么?

1 个答案:

答案 0 :(得分:0)

不清楚“对消费者的控制”是什么意思。创建容器与使用@KafkaListener相同(在封面下创建一个容器)。

Spring使用“消息驱动”方法。

您可以设置idleEventInterval,如果在此期间未收到任何记录,则容器将发布ListenerContainerIdleEvent。您可以使用ApplicationListener bean或@EventListener方法来监听这些事件。