kafka安装部署+kafka-eagle+集成SpringBoot

文章目录

  • 一、kafka安装部署
    • 1.修改环境变量
    • 2.解压修改名称
    • 3.创建存放kafka消息的目录
    • 4、修改配置文件
    • 5.分发kafka安装目录
    • 6.编写kafka集群操作脚本
    • 7.启动kafka集群
    • 8.测试
      • 1.在bin目录下创建主题
      • 2.查看主题列表
      • 3.启动控制台生产者
      • 4.在hadoop103中启动控制台消费者
      • 5.查看结果
  • 二、安装可视化kafka eagle
  • 1.解压文件并改名
  • 2.修改配置文件
  • 3.启动
  • 4.遇到到问题
  • 三、Kafka集成SpringBoot
  • 1.创建SpringBoot添加依赖
  • 2.创建生产者
    • 1)创建controller
    • 2) 修改配置项
    • 3)kafka集群连接话题
    • 4.)触发接口
  • 3.创建消费者
    • 1)创建配置类
    • 2)修改配置项
    • 3.)启动查看效果
  • 4.查看主题
  • 5.创建主题
  • 6.删除主题

一、kafka安装部署

zookeeper端口配置

server.1=192.168.10.102:2888:3888
server.2=192.168.10.103:2888:3888
server.3=192.168.10.104:2888:3888

zookeeper相关指令

zkServer.sh start
zkServer.sh stop
zkServer.sh status

1.修改环境变量

vim /etc/profile.d/my_env.sh

#KFAK_HOME
export KAFKA_HOME=/opt/module/kafka-2.6.0
export PATH=$PATH:$KAFKA_HOME/bin

保存环境变量:source /etc/profile

2.解压修改名称

  1. 进入压缩文件夹中
sudo tar -zxvf kafka_2.13-2.6.0.tgz -C /opt/module/

2.解压

[hadoop@hadoop102 module]$ mv kafka_2.13-2.6.0 kafka-2.6.0

3.创建存放kafka消息的目录

[hadoop@hadoop102 module]$ cd kafka-2.6.0/
[hadoop@hadoop102 kafka-2.6.0]$ sudo mkdir kafka-logs

4、修改配置文件

1.打开config目录下的server.properties

vim /opt/module/kafka-2.6.0/config/server.properties

2.修改内容

broker.id=0 
log.dirs=/opt/module/kafka-2.6.0/kafka-logs
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

参数说明:
broker.id : 集群内全局唯一标识,每个节点上需要设置不同的值
listeners:这个IP地址也是与本机相关的,每个节点上设置为自己的IP地址
log.dirs :存放kafka消息的
zookeeper.connect : 配置的是zookeeper集群地址

5.分发kafka安装目录

 scp -r /opt/module/kafka-2.6.0/ hadoop103:/opt/module/
 scp -r /opt/module/kafka-2.6.0/ hadoop104:/opt/module/

分发完成后,其他集群节点都需要修改配置文件server.properties中的 broker.id 参数(hadoop103,104为1,2)。

6.编写kafka集群操作脚本

1.在家目录下bin文件中创建kf.sh添加内容

# 添加如下内容
#!/bin/bash
case $1 in
"start"){
	for i in hadoop102 hadoop103 hadoop104
	do 
		 echo -------------------------------- $i kafka 启动 ---------------------------
		ssh $i "/opt/module/kafka-2.6.0/bin/kafka-server-start.sh -daemon /opt/module/kafka-2.6.0/config/server.properties"
		echo -------------------------------- $i kafka 启动成功 ---------------------------
	done
}
;;
"stop"){
	for i in hadoop102 hadoop103 hadoop104
	do
		echo -------------------------------- $i kafka 停止 ---------------------------
		ssh $i "/opt/module/kafka-2.6.0/bin/kafka-server-stop.sh"
		echo -------------------------------- $i kafka 停止成功 ---------------------------
	done
	
}
;;
esac

该脚本用一次性启动kafka集群

2.修改权限

# 保存退出后,修改执行权限
chmod 777 ka.sh

7.启动kafka集群

启动kafka集群命令
kf.sh start

停止kafka集群命令
kf.sh stop

8.测试

kafka-topics.sh是用于执行与 Kafka Topic 相关的操作,如创建、删除、查看 Topic 等。

1.在bin目录下创建主题

./bin/kafka-topics.sh --create --bootstrap-server hadoop102:9092 --replication-factor 3 --partitions 1 --topic test

在这里插入图片描述

--create:指定要创建一个新的 Topic。

--bootstrap-server hadoop102:9092:指定 Kafka 集群的引导服务器地址和端口号

--replication-factor 3:指定 Topic 的复制因子,即数据在集群中的副本数。

--partitions 1:指定 Topic 的分区数

--topic test:指定要创建的 Topic 的名称

2.查看主题列表

./bin/kafka-topics.sh --list --bootstrap-server hadoop102:9092

在这里插入图片描述

3.启动控制台生产者

./bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic test

在这里插入图片描述

kafka-console-producer.sh 是 Kafka 提供的一个 shell 脚本,用于在命令行中启动一个控制台生产者,用于向 Kafka 集群发送消息

--broker-list: 指定 Kafka brokers 的地址和端口号,用冒号分隔

--topic: 指定要发送消息的主题名。

4.在hadoop103中启动控制台消费者

./bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic test --from-beginning

在这里插入图片描述

--from-beginning:设置了这个参数,表示从主题的开头开始消费消息,即使已经有了消费者偏移量。如果不设置这个参数,消费者将从当前消费者偏移量之后的消息开始消费

5.查看结果

在生产者控制台输入hello kafka,消费者控制台,就可以消费到生产者的消息,输出 hello kafka,表示消费端成功消费了生产者生产的消息!

生产者hadoop102

在这里插入图片描述

消费者hadoop103

在这里插入图片描述

二、安装可视化kafka eagle

1.解压文件并改名

[hadoop@hadoop102 software]$ tar -zxvf kafka-eagle-bin-3.0.1.tar.gz -C /opt/module/
[hadoop@hadoop102 module]$ mv kafka-eagle-bin-3.0.1 eagle

2.修改配置文件

1.配置环境变量 vim /etc/profile.d/my_env.sh

export KE_HOME=/opt/module/efak
export PATH=$PATH:$KE_HOME/bin

环境变量生效:source /etc/profile

2.修改配置文件

[hadoop@hadoop102 module]$ vim efak/conf/system-config.properties

修改内容,单服务器删除cluster2。

######################################
# multi zookeeper & kafka cluster list
# Settings prefixed with 'kafka.eagle.' will be deprecated, use 'efak.' instead
######################################
efak.zk.cluster.alias=cluster1
cluster1.zk.list=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka


末尾一定带上/kafka,对应上面kafka安装时候设定的路径

修改存储

######################################
# kafka offset storage
######################################
cluster1.efak.offset.storage=kafka

修改数据库

######################################
# kafka mysql jdbc driver address
######################################
efak.driver=com.mysql.cj.jdbc.Driver
efak.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
efak.username=root
efak.password=123456

3.启动

启动时要提前开启zookeeper,和kafka集群。

进入bin目录,启动

./ke.sh start
./ke.sh start    启动
./ke.sh stop	停止
./ke.sh restart  重启
./ke.sh status 状态

4.遇到到问题

kafka-eagle正常启动但是外部页面访问却显示拒绝

kafka安装部署+kafka-eagle+集成SpringBoot_第1张图片

查看err日志文件

vim hs_err_pid67401.log

kafka安装部署+kafka-eagle+集成SpringBoot_第2张图片

上网搜索,得知内存不够,至少需要有1.5g的内存空间

kafka安装部署+kafka-eagle+集成SpringBoot_第3张图片

扩充虚拟内存

再次运行成功

kafka安装部署+kafka-eagle+集成SpringBoot_第4张图片

三、Kafka集成SpringBoot

1.创建SpringBoot添加依赖

kafka安装部署+kafka-eagle+集成SpringBoot_第5张图片

2.创建生产者

1)创建controller

创建ProducerController添加代码

@RestController
@Slf4j
public class ProducerController {
    @Autowired
    KafkaTemplate<String, String> kafka;

    @RequestMapping("/pro")
    public String date(String msg) {
        log.info("发送消息--{}", msg);
        kafka.send("first", msg);
        return "ok";
    }
}

2) 修改配置项

在application.properties中添加

#l连接kafka集群
spring.kafka.bootstrap-servers=hadoop102:9092,hadoop103:9092

#序列化
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

bootstrap-servers:Kafka服务地址

key-serialize:向Kafka发送数据,key采用的序列化方式

.value-serializer:向Kafka发送数据,数据采用的序列化方式

3)kafka集群连接话题

[hadoop@hadoop102 kafka-2.6.0]$ ./bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first --from-beginning

4.)触发接口

kafka安装部署+kafka-eagle+集成SpringBoot_第6张图片

后台查看结果

kafka安装部署+kafka-eagle+集成SpringBoot_第7张图片

3.创建消费者

1)创建配置类

创建KafkaConsumer,添加下面内容

@Configuration
@Slf4j
public class KafkaConsumer {

    @KafkaListener(topics = "first")
    public void consumerTopic(String msg){
      log.info("收到消息---{}",msg);

    }
}

2)修改配置项

在配置项中添加配置

#连接kafka集群

#key value 的反序列化

spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
#消费者组
spring.kafka.consumer.group-id=mentugroup 

bootstrap-servers:Kafka服务地址

key-serialize:向Kafka发送数据,key采用的序列化方式

value-serializer:向Kafka发送数据,数据采用的序列化方式

group-id:消费者组默认名称

3.)启动查看效果

kafka安装部署+kafka-eagle+集成SpringBoot_第8张图片

2.发送消息

在这里插入图片描述

3.收到消息

在这里插入图片描述

4.终端查看

kafka安装部署+kafka-eagle+集成SpringBoot_第9张图片

4.查看主题

1.创建新的接口getTopic

 @GetMapping("/getTopic")
    public  void getTopic() throws ExecutionException, InterruptedException {
        Properties properties = new Properties();
        properties.put("bootstrap.servers","hadoop102:9092");
        //创建管理对象,用于管理操作
        AdminClient adminClient = AdminClient.create(properties);
        //获取主题列表
        ListTopicsResult listTopicsResult = adminClient.listTopics();
        //获取 KafkaFuture 对象,该对象表示异步获取主题名称的结果
        KafkaFuture<Set<String>> names = listTopicsResult.names();
        //遍历获取结果
        for (String s : names.get()) {
            log.info("topic名称:{}",s);
        }
    }
    }

2.测试接口

kafka安装部署+kafka-eagle+集成SpringBoot_第10张图片

3.查看控制台输出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTJ4LeSN-1681193771771)(C:\Users\HongYongX\Desktop\norebook\实习计划\kafka\image-20230410154001919.png)]

对比结果,结果一致

在这里插入图片描述

5.创建主题

1.创建createTopic方法

 @RequestMapping("/createTopic")
    public void createTopic( String topic) throws ExecutionException, InterruptedException {
        Properties pro = new Properties();
        pro.put("bootstrap.servers","hadoop102:9092");
        AdminClient admin = AdminClient.create(pro);
        //话题名称 分区数,副本数
        NewTopic newTopic = new NewTopic(topic, 1, (short) 3);
        ArrayList<NewTopic> newTopicArrayList = Lists.newArrayList();
        newTopicArrayList.add(newTopic);
        CreateTopicsResult result = admin.createTopics(newTopicArrayList);
        result.all().get();
    }

2.发送请求

kafka安装部署+kafka-eagle+集成SpringBoot_第11张图片

3.查看结果

kafka安装部署+kafka-eagle+集成SpringBoot_第12张图片

6.删除主题

1.创建方法

@RequestMapping("/delectTopic")
    public void delectTopic(String topic) throws ExecutionException, InterruptedException {
        Properties pro = new Properties();
        pro.setProperty("bootstrap.servers","hadoop102:9092");
        AdminClient admin = AdminClient.create(pro);
        //创建话题删除列表
        ArrayList<String> delectTopicList = Lists.newArrayList();
        delectTopicList.add(topic);
        //删除话题删除列表
        DeleteTopicsResult result = admin.deleteTopics(delectTopicList);
        result.all().get();
    }

2.测试接口

kafka安装部署+kafka-eagle+集成SpringBoot_第13张图片

3.查看结果

kafka安装部署+kafka-eagle+集成SpringBoot_第14张图片
create话题已经被删除

你可能感兴趣的:(kafka,spring,boot,java,分布式)