Spring for Apache Kafka实战

背景介绍

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

avatar

生产者的使用

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 for Apache Kafka

官方的文档只是给出了,如何配置和通过工厂构造出一个模板。而我们需要的是一个完整的能在项目中使用的案例。在这里我给出一个与Spring boot集成,完整的生产者案例。

首先构造一个模板类

原文链接

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/81237155