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
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
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
[hadoop@hadoop102 module]$ cd kafka-2.6.0/
[hadoop@hadoop102 kafka-2.6.0]$ sudo mkdir kafka-logs
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集群地址
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)。
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
启动kafka集群命令
kf.sh start
停止kafka集群命令
kf.sh stop
kafka-topics.sh是用于执行与 Kafka Topic 相关的操作,如创建、删除、查看 Topic 等。
./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 的名称
./bin/kafka-topics.sh --list --bootstrap-server hadoop102:9092
./bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic test
kafka-console-producer.sh
是 Kafka 提供的一个 shell 脚本,用于在命令行中启动一个控制台生产者,用于向 Kafka 集群发送消息
--broker-list
: 指定 Kafka brokers 的地址和端口号,用冒号分隔
--topic
: 指定要发送消息的主题名。
./bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic test --from-beginning
--from-beginning
:设置了这个参数,表示从主题的开头开始消费消息,即使已经有了消费者偏移量。如果不设置这个参数,消费者将从当前消费者偏移量之后的消息开始消费
在生产者控制台输入hello kafka
,消费者控制台,就可以消费到生产者的消息,输出 hello kafka
,表示消费端成功消费了生产者生产的消息!
生产者hadoop102
消费者hadoop103
[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
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
启动时要提前开启zookeeper,和kafka集群。
进入bin目录,启动
./ke.sh start
./ke.sh start 启动
./ke.sh stop 停止
./ke.sh restart 重启
./ke.sh status 状态
kafka-eagle正常启动但是外部页面访问却显示拒绝
查看err日志文件
vim hs_err_pid67401.log
上网搜索,得知内存不够,至少需要有1.5g的内存空间
扩充虚拟内存
再次运行成功
创建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";
}
}
在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发送数据,数据采用的序列化方式
[hadoop@hadoop102 kafka-2.6.0]$ ./bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first --from-beginning
后台查看结果
创建KafkaConsumer,添加下面内容
@Configuration
@Slf4j
public class KafkaConsumer {
@KafkaListener(topics = "first")
public void consumerTopic(String msg){
log.info("收到消息---{}",msg);
}
}
在配置项中添加配置
#连接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:消费者组默认名称
2.发送消息
3.收到消息
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.测试接口
3.查看控制台输出
对比结果,结果一致
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.发送请求
3.查看结果
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.测试接口
3.查看结果