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发布于博客园