背景介绍
Kafka是一个分布式的、可分区的、可复制的消息系统,在现在的互联网公司,应用广泛,在我们公司在主要运用在定时推送业务,批量数据处理,日志上传等方面,我发现网上大部分博客,在使用上还只是对Apache 官方提供的client,进行运用开发,在这里推荐使用 Spring for Apache Kafka(简称spring-kafka) ,更新维护稳定,方法众多,并且强大,现已加入Spring豪华大礼包。
大坑预警
spring-kafka实际上也是对apache的kafka-client进行了包装和开发,所以使用的时候一定注意,你引入的spring-kafka里封装的kafka-client的版本要和服务器上的kafka服务器版本要对应,不然就会产生问题,比如消费失败。官网上在首页就贴出了SpringKafka和kafka-client版本(它的版本号要和kafka服务器的版本保持一致)的对应关系Spring for Apache Kafka
生产者的使用
spring-kafka对于生产者提供了两个模板类,分别是
- KafkaTemplate :包装了一个生产者,并提供方便的方法将数据发送到kafka的topics。
- ReplyingKafkaTemplate :KafkaTemplate的子类,增加了一个请求/应答功能,在发送数据后会返回一个future ,里面封装了消费者的应答信息。
这里主要介绍KafkaTemplate。对于使用,官方提供了这样一个案例
To use the template, configure a producer factory and provide it in the template’s constructor:
@Bean
public ProducerFactory<Integer, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
// See https://kafka.apache.org/documentation/#producerconfigs for more properties
return props;
}
@Bean
public KafkaTemplate<Integer, String> kafkaTemplate() {
return new KafkaTemplate<Integer, String>(producerFactory());
}
官方的文档只是给出了,如何配置和通过工厂构造出一个模板。而我们需要的是一个完整的能在项目中使用的案例。在这里我给出一个与Spring boot集成,完整的生产者案例。
首先构造一个模板类