要在Spring Boot中批量消费Kafka消息,一般需要步骤进行配置:
- 添加依赖项:
在您的
pom.xml
文件中添加Kafka的Spring Boot依赖项:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 定义Kafka消费者配置:
创建一个Java类作为Kafka消费者的配置类,并使用
@Configuration
注解标记它。配置ConsumerFactory
和KafkaListenerContainerFactory
:
@Configuration
public class KafkaConsumerConfig {
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Value("${spring.kafka.consumer.group-id}")
private String groupId;
@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.setBatchListener(true); // 开启批量消费
return factory;
}
}
在上面的代码中,我们使用了@Value
注解将Kafka的配置属性值注入到变量中,您可以在application.properties
文件中配置这些属性值。
- 创建Kafka消息监听器:
创建一个Java类作为Kafka消息监听器,并使用
@KafkaListener
注解标记它。在@KafkaListener
注解中指定要监听的Kafka主题,并使用List
类型作为参数接收批量消费的消息。
@Component
public class KafkaConsumerListener {
@KafkaListener(topics = "${spring.kafka.consumer.topic}", containerFactory = "kafkaListenerContainerFactory")
public void listen(List<String> messages) {
// 处理接收到的消息
for (String message : messages) {
System.out.println("Received message: " + message);
}
}
}
在上面的代码中,我们使用了@KafkaListener
注解指定要监听的Kafka主题,并将kafkaListenerContainerFactory
作为containerFactory
参数传递。
- 配置Kafka相关属性:
在
application.properties
文件中配置Kafka的相关属性,例如Kafka服务器地址、消费者分组ID和要监听的主题:
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group-id
spring.kafka.consumer.topic=my-topic
- 运行应用程序:在Spring Boot应用程序中,通过
@Autowired
注解将KafkaConsumerListener
注入到适当的位置,并启动应用程序。当Kafka中的消息到达时,listen
方法将被调用并接收批处理消息。