spring和springboot集成kafka
1.kafka配置
- 一般组件支持的配置都会再*Config.Java中描述,其中有可配置项、可配置项描述、默认配置值等信息,而kafka的配置类为:ProducerConfig.java
#kafka服务器的地址和端口,eg:127.0.0.1:9092
bootstrap.servers
#控制客户端如何使用DNS查找
client.dns.lookup
#阻塞等待元数据的最长时间;ps:数据首次发送到topic时,需要先获取改topic的元数据,才能知道改topic的依赖服务
metadata.fetch.timeout.ms #默认:60 * 1000
#更新元数据的刷新时间
metadata.max.age.ms #默认:5 * 60 * 1000
#缓存元数据的时间
metadata.max.idle.ms
#指定批处理的大小,单位未字节;ps:当消息字节数达到该值后,统一将消息分发到各以来服务
batch.size #默认:16384
#记录的最大缓冲区
buffer.memory #默认:32 * 1024 * 1024
#值为0,则不使用ack机制;值为1则相反
acks #默认:1
#服务端等端确认ack的最大时间
timeout.ms #默认:30 * 1000
#暂不描述
linger.ms 默认:0
#客户端id(方便资源跟踪)
client.id
#发送/接收 数据时要使用的TCP发送缓冲区的大小
send.buffer.bytes #默认:128 * 1024
receive.buffer.bytes #默认:32 * 1024
#请求的最大大小。这实际上也是最大记录大小的上限
max.request.size #默认:1 * 1024 * 1024
#重试连接等待的时间
reconnect.backoff.ms #默认:50
#当缓冲区耗尽时是否需要阻塞或抛出异常
block.on.buffer.full #默认:true
#重试次数
retries #默认:0
#重试等待时间
retry.backoff.ms #默认:100
#生产者发送的消息的压缩类型
compression.type #默认:none
#客户端在阻塞之前将通过单个连接发送的未确认请求的最大数量
max.in.flight.requests.per.connection #默认:5
#key/value的序列化方式
key.serializer
value.serializer
2.spring中使用kafka
-
引入kafka原生jar
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.6.0</version> </dependency>
-
客户端producer demo
@Configuration public class KafkaConfig { @Value("lego.kafka.bootstrap.servers") private String kafkaBootstrapServers; @Bean public KafkaProducer kafkaProducer(){ Properties properties = new Properties(); properties.put("bootstrap.servers", kafkaBootstrapServers); properties.put("client.id", "lego-leju"); properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); properties.put("acks", "1"); properties.put("retries", "3"); return new KafkaProducer(properties); } }
3.springboot中使用kafka
-
引入spring-kafka的jar
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>
-
客户端producer demo
#1.在springboot的properties配置文件中添加kafka配置项 spring.kafka.bootstrap-servers=ip:host spring.kafka.client-id=test spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.acks=1 spring.kafka.producer.retries=3 spring.kafka.template.default-topic=topic
//直接注入kafkaTemplate的bean即可使用 @Autowired private KafkaTemplate<String, String> kafkaTemplate;