SringBoot整合Kafka

SringBoot整合Kafka示例

一、概述

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • Scale out:支持在线水平扩展

简介:Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于 大数据实时处理领域。

二、使用

 1、pom依赖 

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

  2、配置

#指定kafka server的地址,集群配多个,中间,逗号隔开 kafka
spring.kafka.bootstrap-servers=192.168.xx.xxx:9092 
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer= org.apache.kafka.common.serialization.StringSerializer
spring.kafka.consumer.group-id= test
spring.kafka.consumer.enable-auto-commit= true
spring.kafka.consumer.auto-commit-interval=20000
spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer

 3、使用

  创建主题、生成消息

@RestController
public class Producer{

    @Resource
    private KafkaTemplate <String, Object> kafkaTemplate;

    /**
     * 生成消息
     */
    @RequestMapping("sendMessage")
    public String send(String msg,String topic) {
        kafkaTemplate.send(topic, msg);
        return "success";
    }

    /**
     * 创建主题
     */
    @RequestMapping("createTopic")
    public String createTopic() {
        Properties prop = new Properties();
        prop.put("bootstrap.servers", " 192.168.xx.xxx:9092");
        AdminClient admin = AdminClient.create(prop);
        ArrayList <NewTopic> topics = new ArrayList <>();
        // 参数:主题名称、分区数、副本数
        NewTopic newTopic = new NewTopic("top", 1, (short) 1);
        topics.add(newTopic);
        CreateTopicsResult result = admin.createTopics(topics);
        try {
            result.all().get();
        } catch(Exception e) {
            return "创建失败";
        } 
        return "success";
    }
}

  消费消息

@Component
public class Consumer{
    /**
     * 对应主题实现对应的事情:如短信发送、消息推送、处理逻辑
     */
    @KafkaListener(topics = {"top1","top2"})
    public void listenAll(ConsumerRecord<?, ?> record) {
        System.err.println("主题:" + record.topic() + "   消息:" + record.value());
    }
}

四、扩展(待补充)

 常用Message Queue

  RabbitMQ 、Redis 、ZeroMQ、ActiveMQ、Kafka/Jafka

posted on 2020-07-09 16:49  fuanfei  阅读(108)  评论(0)    收藏  举报