SpringBoot整合Kafka消息中间件

kafka

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

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

Kafka主要设计目标如下:

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

更多参考 https://www.cnblogs.com/qingyunzong/p/9004509.html

docker搭建kafka环境

  1. 启动zookeep

    docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
    
  2. 启动kafka

    docker run  -d --name kafka \
    -p 9092:9092 \
    -e KAFKA_BROKER_ID=0 \ 
    -e KAFKA_ZOOKEEPER_CONNECT=192.168.75.50:2181 \ 
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.75.50:9092 \
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka 
    
  3. 集群搭建(可选)

    docker run -d --name kafka1 \
    -p 9093:9093 \
    -e KAFKA_BROKER_ID=1 \
    -e KAFKA_ZOOKEEPER_CONNECT=192.168.75.50:2181 \
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.75.50:9093 \
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -t wurstmeister/kafka
    
  4. 可视化界面查看

    docker run -it -d  -p 9000:9000 -e ZK_HOSTS="192.168.75.50:2181" --net=host sheepkiller/kafka-manager
    

    SpringBoot整合Kafka消息中间件_第1张图片

springboot整合kafka

  1. 使用idea新建springboot工程

  2. 修改pom文件

    
    
        4.0.0
        
            org.springframework.boot
            spring-boot-starter-parent
            2.1.5.RELEASE
             
        
        com.chen
        springboot-kafka
        0.0.1-SNAPSHOT
        springboot-kafka
        Demo project for Spring Boot
    
        
            1.8
        
    
        
            
                org.springframework.boot
                spring-boot-starter
            
            
                org.springframework.kafka
                spring-kafka
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
            
                org.springframework.kafka
                spring-kafka-test
                test
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
            
        
    
    
    
    
  3. 修改application.yml配置文件

    # kafka
    spring:
      kafka:
        bootstrap-servers: 192.168.75.50:9092
        consumer:
          group-id: myGroup
    
  4. 创建消息提供者

    package com.chen.springbootkafka;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runner.Runner;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.kafka.core.KafkaTemplate;
    import org.springframework.kafka.support.SendResult;
    import org.springframework.messaging.support.GenericMessage;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.util.concurrent.ListenableFuture;
    import org.springframework.util.concurrent.ListenableFutureCallback;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class SendMsg {
    
        @Autowired
        private KafkaTemplate kafkaTemplate;
    
        @Test
        public void sendMq(){
    
            try {
                ListenableFuture> future = kafkaTemplate.send("test","luoye", "hello kafka");
                future.addCallback(new ListenableFutureCallback>() {
                    @Override
                    public void onSuccess(SendResult result) {
                        System.out.println(result.toString());
                        System.out.println("推送消息成功");
                    }
    
                    @Override
                    public void onFailure(Throwable throwable) {
                        System.out.println("推送消息失败");
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
    
  5. 创建消息消费者

    package com.chen.springbootkafka;
    
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.springframework.kafka.annotation.KafkaListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ReviceMq {
    
    
        @KafkaListener(topics = {"test"})
        public void listen(ConsumerRecord record){
            System.out.println(record.key());
            System.out.println(record.value());
        }
    }
    
    

运行结果:
SpringBoot整合Kafka消息中间件_第2张图片

你可能感兴趣的:(SpringBoot)