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發佈於博客園

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章