Spring for Apache Kafka: @KafkaListener 的使用示例(消费)

版本 Version 2.7.8

--

 

阅读 Version 2.7.8 的 Spring for Apache Kafka 官方文档,检出其中的 注解 @KafkaListener 的使用方式。

关键词:

ConsumerRecord、 Message、 Acknowledgment、...

ben发布于博客园

文档中可以搜索到 185 条 @KafkaListener 的数据:

 

官文下载地址:

https://docs.spring.io/spring-kafka/docs/

找到对应版本的 pdf 几个下载。

 

不同的函数参数(消息)类型:单条

消息为 String

 

消息为 ConsumerRecord

 

消息为 String:加确认

 

使用 @Payload、@Header

KafkaHeaders 的 常量:

 

使用 ConsumerRecordMetadata

 

消息为 byte[]

 

批量监听&处理消息

先定义类型为 KafkaListenerContainerFactory 的 Bean

注意,这里的 consumerFactory() 可以看 官文 中下面的介绍:ben发布于博客园

官文的Kafka配置-部分
 @Configuration
@EnableKafka
public class Config {
  @Bean
  ConcurrentKafkaListenerContainerFactory<Integer, String>
  kafkaListenerContainerFactory(ConsumerFactory<Integer,
String> consumerFactory) {
  ConcurrentKafkaListenerContainerFactory<Integer, String> factory =
  new ConcurrentKafkaListenerContainerFactory<>();
  factory.setConsumerFactory(consumerFactory);
  return factory;
  }
  @Bean
  public ConsumerFactory<Integer, String> consumerFactory() {
  return new DefaultKafkaConsumerFactory<>(consumerProps());
  }
      private Map<String, Object> consumerProps() {
  Map<String, Object> props = new HashMap<>();
  props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
  props.put(ConsumerConfig.GROUP_ID_CONFIG, "group");
  props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class);
  props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
  props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
  // ...
  return props;
  }
   
}

 

以下 批量消费 都配置了 containerFactory 属性

ben发布于博客园

疑问:

是否可以通过配置的方式来实现 全局批量消费呢?TODO 

 

批量消费1:String 类型

 

批量消费2:Message 类型

 

批量消费3:ConsumerRecord 类型

 

批量消费4:ConsumerRecords 类型

 

@KafkaListener 作为 元注解

Starting with version 2.2...ben发布于博客园

使用 上面 自定义的注解 MyThreeConsumersListener :

 

使用 @KafkaListener + @KafkaHandler

 @KafkaListener 用来修饰 类 时(注意,前面都是 修饰 方法),必须使用 @KafkaHandler。ben发布于博客园

使用注解 @KafkaListeners 

注意,非官文内容,请自行验证。

下面是 定义了 4个监听器 消费 同一个分区,同时使用了 containerFactory 属性配置。

	@org.springframework.kafka.annotation.KafkaListeners({
		// 1-4
        // idIsGroup = false 是必须的!否则会影响 batchFactory 中的 groupId 的配置
		@KafkaListener(id="bt11", idIsGroup = false, topics = {topic1}, containerFactory = "batchFactory"),
		@KafkaListener(id="bt12", idIsGroup = false, topics = {topic1}, containerFactory = "batchFactory"),
		@KafkaListener(id="bt13", idIsGroup = false, topics = {topic1}, containerFactory = "batchFactory"),
		@KafkaListener(id="bt14", idIsGroup = false, topics = {topic1}, containerFactory = "batchFactory"),
	})
	public void topic1ListenerBatch(List<ConsumerRecord<String, String>> list) {
        // 处理消息...批量
    }

 

消息校验

消费一个 校验类 对象。

注意,未 亲测,大家自行试验——参考官方文档。ben发布于博客园

小结

这个算是 中级 Kafka使用吧,官文中还有更多高级的使用方式,待解锁。ben发布于博客园

 

---END---

ben发布于博客园

本文链接:

https://www.cnblogs.com/luo630/p/17153871.html

ben发布于博客园

参考资料

1、springboot自定义kafka消费者KafkaListenerContainerFactory配置说明和实验

by wsdl-king

于 2020-09-16 17:55:38 发布

原文链接:https://blog.csdn.net/gpdsjqws/article/details/108625300

2、Kafka之auto.offset.reset 值解析

by Romantic_lei

已于 2022-09-02 15:34:30 修改

原文链接:https://blog.csdn.net/Romantic_lei/article/details/126597740

3、Springboot 注解 @KafkaListener 实现 Kafka 批量消费

by 风情客家__

已于 2023-02-17 17:58:02 修改

https://blog.csdn.net/justlpf/article/details/127406460

4、【spring-kafka】@KafkaListener详解与使用

by 石臻臻的杂货铺

已于 2022-04-01 10:44:09 修改

原文链接:https://blog.csdn.net/u010634066/article/details/109803987

5、

 

ben发布于博客园

 

posted @ 2023-02-25 10:47  快乐的欧阳天美1114  阅读(2169)  评论(0编辑  收藏  举报