Linux安装kafka及springboot整合实现消息队列

一、 linux部署kafka

安装前要确保已经安装jdk,可参考我之前的文章

1. 下载kafka安装包(我自己是安装的2.5版本)

kafka官网下载地址

2. 解压到linux服务器的文件夹中

# tar -zxvf kafka_2.12-2.5.0.tgz 

解压后的文件夹内容如下

[root@hecs-170265 kafka_2.12-2.5.0]# ls
bin  config  libs  LICENSE  logs  NOTICE  site-docs

3.进入config文件夹,修改zookeeper.properties 和server.properties

修改zookeeper.properties中的

dataDir=/opt/data/zookeeper  #自己定义,先建一个这个文件夹
clientPort=2181    #zk的端口,我这里没有修改

修改server.properties中的

listeners=PLAINTEXT://自己服务器的ip:9092
advertised.listeners=PLAINTEXT://公网ip:9092   #我自己使用的是华为云服务器 需要配置这个代理地址,这个ip配的是对外的公网ip,之前没有配置会出现服务器kafka正常,java项目无法连接的情况 
log.dirs=/data/kafka-logs    #同dataDir
zookeeper.connect=localhost:2181   #这个端口就是你配置的zk端口

自己服务器ip可以使用ifconfig查看

4. 启动zookeeper

在bin文件夹下执行

 ./zookeeper-server-start.sh -daemon ../config/zookeeper.properties

5. 启动kafka

在bin文件夹下执行

 ./kafka-server-start.sh -daemon ../config/server.properties

6. 校验

输入netstat -tln命令查看kafka和zk端口是否启用

也可以本地测试下
bin文件夹下创建一个topic

./kafka-topics.sh --create --topic test-events --bootstrap-server 服务器ip:9092

创建一个生产者

 ./kafka-console-producer.sh --topic  test-events --bootstrap-server 

再开一个端口创建一个消费者

./kafka-console-consumer.sh --topic  test-events --bootstrap-server 

生产者输入消息,消费组那边打印就说明没问题

7. 注意事项

查看防火墙是否打开kafka和zk端口,如果是云服务器查看安全组是否打开对应端口

二、 springboot集成kafka

1. 引入依赖

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

2. 配置文件



spring.kafka.bootstrap-servers=服务器ip:9092
spring.kafka.listener.concurrency=3
spring.kafka.listener.ack-mode=manual
spring.kafka.producer.retries=1
spring.kafka.producer.acks=all
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=${spring.application.name}
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=false
spring.kafka.consumer.auto-commit-interval=5
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

3. 生产者

    @Autowired
    KafkaTemplate<String, String> kafkaTemplate;

    @PostMapping("register")
    public void useKafka() {
        String data="要发送的数据";
        kafkaTemplate.send("test-events", data).addCallback(success -> {

            // 消息发送到的topic
            String topic = success.getRecordMetadata().topic();
            // 消息发送到的分区
            int partition = success.getRecordMetadata().partition();
            // 消息在分区内的offset
            long offset = success.getRecordMetadata().offset();
            log.info("发送消息成功:" + topic + "-" + partition + "-" + offset + "-" + data);
        }, failure -> {
            log.info("发送消息失败:" + failure.getMessage());
        });

    }

4. 消费者

@KafkaListener(topics = "test-events")
    public void listen(ConsumerRecord<?, ?> record, Acknowledgment ack) throws IOException {
        try {
            System.out.println("process:" + record.topic() + record.partition() + record.toString());
        }catch (Exception e){

        }finally {
            ack.acknowledge();
        }

    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值