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