SpringBoot整合kafka及kafka部署保姆级案例

目录

(一)kafka部署 

下载及修改配置

启动kafka 

创建主题

查看主题

创建生产者

创建消费者

(二)spring boot整合kafka

(三)部署工程中遇到的坑点

报错 Connection to node -1 could not be established. Broker may not be available

启动Kafka出现The Cluster ID doesn't match stored clusterId


由于服务器资源有限,此案例都是单机部署,算是小白引路案例。

(一)kafka部署 

下载及修改配置

http://kafka.apache.org/downloads.html 下载 

丢到服务器,tar zxvf +文件名  命令行解压。

在进入解压后的文件在config/ 目录下 找到server.properties 配置文件

进行命令行  vi server.propertie 进行修改

 将如图两处改为你的服务器ip ,如果在host中你有做解析处理,这里也可以填写你域名,localhost之类的,笔者在这里写的是服务器的ip.

修改完成以后 就可以启动了,由于kafka正常运行前提是zookeeper处于启动状态 ,先确认一下zookeeper 是否启动。

jps | grep -v Jps  查看zk进程 

标红为zk进程

没有的话需要自己重新部署或者启动一下zookeeper了,笔者这里不做讲解了,在kafka包里也自带了配置好了的zookeeper,在bin目录下可以找到。

启动kafka 

bin目录下执行

./kafka-server-start.sh  ../config/server.properties 前台启动 一旦退出 kafka也随即关闭 这里不推荐

nohup ./kafka-server-start.sh ../config/server.properties & 后台启动  推荐采用这种方式

同理执行启动以后 也可以通过 jps | grep -v Jps  查看kafka 进程 如图

创建主题

./kafka-topics.sh --create --zookeeper 你的ip:2181 --config max.message.bytes=12800000 --config flush.messages=1 --replication-factor 1 --partitions 1 --topic 你的主题名称

笔者这里取的名称是 myqueue。

查看主题

./kafka-topics.sh --list --zookeeper 你的ip:2181  

可以看到刚刚创建的主题myqueue

创建生产者

bin/kafka-console-producer.sh --broker-list 你的IP:9092 --topic myqueue

创建消费者

bin/kafka-console-consumer.sh --bootstrap-server 你的IP:9092 --topic myqueue --from-beginning

可以看到刚刚生产者输入的消息 消费者已经接收到 

(二)SpringBoot整合kafka

创建工程选择依赖包

   

 项目结构

application.yml配置

spring:
  kafka:
    bootstrap-servers: xx:xx:xx:xx:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: demo
      enable-auto-commit: true
      auto-commit-interval: 1000
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
 @RestController
    @RequestMapping("producer")
    public class ProducerController {

        @Autowired
        private KafkaTemplate<String, String> kafkaTemplate;

        @RequestMapping("msg")
        public String send(String msg){
            kafkaTemplate.send("myqueue", msg);
            return "success";
        }

    }
@Component
public class Consumer {

    @KafkaListener(topics = "myqueue")
    public void listen (ConsumerRecord<?, ?> record) throws Exception {
        System.out.println( "主题名:"+record.topic());
        System.out.println( "偏移量:"+record.offset());
        System.out.println( "消息:"+record.value());
    }
}

 

 

运行程序 

可以先在服务器发送两段段消息

 

在应用服务器上可以看到消费的信息(由于我之前在当前topic发了一些消息 所以offset并没有从1开始)

同理我们也可以通过

 http://localhost:8080/producer/msg?msg=hello%20kafka

同理在应用服务器可以看到

(三)部署工程中遇到的坑点

报错 Connection to node -1 could not be established. Broker may not be available

 

看了很多文章都是说要在 server.properties 配置文件中 把localhost改为你的ip地址 但是笔者一开始就是写的IP地址。

经排查,最容易忽略的一点就是9092这个端口是否对外开放。

查看 命令行 看是否返回yes

firewall-cmd --zone=public --query-port=9092/tcp

未开通的情况  执行如下命令 即可解决端口问题

firewall-cmd --zone=public --add-port=9092/tcp --permanent   (--permanent永久生效,没有此参数重启后失效)

firewall-cmd --reload ---重载

启动Kafka出现The Cluster ID doesn't match stored clusterId

这是由于不正确的关闭kafka所致 笔者这里强行kill kafka出现的 

处理方式如下

找到配置文件

  cat server.properties

        查看log.dirs所在位置

  log.dirs=/tmp/kafka-logs

       按着这个路径找到  meta.properties

      然后删除 rm -rf   meta.properties

      重启kafka 恢复正常

 

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值