Kafka侦听器收到List <consumerrecord <string,string =“” >>,可以消费吗?

时间:2019-01-25 08:14:05

标签: spring kafka-consumer-api spring-kafka

我是Kafka的超级新手,坦率地说,我对这种类型的消费者一无所知(据我了解,由于该产品已经批量生产),因此我努力弄清楚如何从根本上消耗这些消费者的清单事件。

我有这样的东西:

    @KafkaListener(topics = "#{'${kafka.listener.list-of-topics}'.split(',')}")
        public void readMessage(List<ConsumerRecord<String, String>> records,
                                   final Acknowledgment acknowledgment) {

            try {
....

我知道我收到一个事件(至少一个事件)的类型为“ MyObject”,所以当我收到一条消息时就可以做到。

我相信必须有一种方法来读取/播放此List<ConsumerRecords<String,String>,但我不知道如何。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

请参见the reference manual: Batch Listeners

  

从版本1.1开始,可以将@KafkaListener方法配置为接收从消费者调查中接收的整批消费者记录。要将侦听器容器工厂配置为创建批处理侦听器,请设置batchListener属性:

@Bean
public KafkaListenerContainerFactory<?> batchFactory() {
    ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
            new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());
    factory.setBatchListener(true);  // <<<<<<<<<<<<<<<<<<<<<<<<<
    return factory;
}
  

...

     

您还可以收到ConsumerRecord<?, ?>对象的列表,但是它必须是在上定义的唯一参数(使用手动提交和/或Acknowledgment参数时,除了可选的Consumer<?, ?>之外)方法:

     

...

使用Spring Boot时,设置属性spring.kafka.listener.type=batch