1、配置文件
#Broker
spring.kafka.bootstrap-servers=ip:9092
#生产者
spring.kafka.producer.bootstrap-servers=ip:9092
spring.kafka.producer.acks=1
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432
#监听器
spring.kafka.listener.type=batch
spring.kafka.listener.ack-mode=batch
#消费者
spring.kafka.consumer.bootstrap-servers=ip:9092
spring.kafka.consumer.auto-offset-reset=latest
2、config类
package config;
import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.config.KafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.listener.AbstractMessageListenerContainer;
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
/**
* @author shiyu.
* @date 2022-06-10.
*/
@Configuration
@EnableConfigurationProperties(KafkaProperties.class)
public class KafkaConfig {
private final KafkaProperties kafkaProperties;
public KafkaConfig(KafkaProperties kafkaProperties) {
this.kafkaProperties = kafkaProperties;
}
private ProducerFactory<String, Object> producerFactory() {
return new DefaultKafkaProducerFactory<>(this.kafkaProperties.buildProducerProperties());
}
private ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(this.kafkaProperties.buildConsumerProperties());
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.getContainerProperties().setPollTimeout(1500);
factory.getContainerProperties().setAckMode(AbstractMessageListenerContainer.AckMode.BATCH);
factory.setBatchListener(true);
return factory;
}
@Bean
public KafkaTemplate<String, Object> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
3、生产者直接注入kafkaTemplate
4、消费者
package consumer;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Slf4j
public class ActiveConsumer {
@KafkaListener(containerFactory = "kafkaListenerFactory", topics = "test", groupId = "test", clientIdPrefix = "test")
public void clickReport(List<ConsumerRecord<String, String>> list) {
for (ConsumerRecord<String, String> record : list) {
}
}
}