环境说明
- 基于kafka_2.11-2.4.1版本
- 依赖zookeeper,自行安装. 或者见Zookeeper集群搭建
- centos7
- 官网下载地址
集群规划
- 之后每台服务器的配置编写几乎一摸一样, 除了myid文件内容不同
| hadoop300 | hadoop301 | hadoop302 | |
|---|---|---|---|
| kafka | V | V | V |
[Tip]
- 如无特别说明, 所有配置每个服务器要保持一致
安装
1、安装包准备
- 下载后, 解压到每台服务器的一个位置即可.
- 如下hadoop300, 其他集群服务器一样放置
[hadoop@hadoop300 app]$ pwd
/home/hadoop/app
[hadoop@hadoop300 app]$ ll
总用量 0
lrwxrwxrwx. 1 hadoop hadoop 44 1月 13 23:24 jdk -> /home/hadoop/app/manager/jdk_mg/jdk1.8.0_212
lrwxrwxrwx. 1 hadoop hadoop 50 1月 14 19:16 kafka -> /home/hadoop/app/manager/kafka_mg/kafka_2.11-2.4.1
drwxrwxr-x. 6 hadoop hadoop 72 1月 14 19:16 manager
lrwxrwxrwx. 1 hadoop hadoop 64 1月 14 17:24 zookeeper -> /home/hadoop/app/manager/zookeeper_mg/apache-zookeeper-3.5.7-bin
2、配置环境变量
修vim ~/.bash_profile 文件添加如下, 每台服务器都要配置
# ================= Kafka =====================
export KAFKA_HOME=/home/hadoop/app/kafka
export PATH=$PATH:$KAFKA_HOME/bin
3、 修改配置文件
- 修改
${KAFKA_HOME}/config/server.properties文件 broker.id=xx在每个服务器上要配置不同的id,不能重复
# 唯一标识别broker的id
# 我这里是hadoop300,标识为0, 其他服务器上hadoop301为1 hadoop302为2 (省略)
broker.id=0
# 以逗号分隔的目录列表,用于存储日志文件(实际上是broker数据文件)就是存放到这个路径
log.dirs=/home/hadoop/app/kafka/data
# 是否允许真正删除topic
delete.topic.enable=True
# zk集群访问地址, 在 /kafka路径下存储kafka相关数据
zookeeper.connect=hadoop300:2181,hadoop301:2181,hadoop302:2181/kafka
4、kafka集群统一启动/停止脚本
[hadoop@hadoop300 shell]$ pwd
/home/hadoop/shell
[hadoop@hadoop300 shell]$ vim kafka.sh
[hadoop@hadoop300 shell]$ chmod ug+x kafka.sh
[hadoop@hadoop300 shell]$ ll
-rwxrwxr--. 1 hadoop hadoop 464 1月 14 17:50 kafka.sh
kafka.sh内容如下
[Tip]
- 因为配置了kafka的环境变量到
~/.bash_profile下所以可以直接使用kafka-server-start.sh脚本. 当然也可以写该脚本的绝对路径即可. - ssh远程执行命令默认不会加载这个
bash_profile环境变量,所以手动source一下,详细见ssh连接远程主机执行脚本的环境变量问题
#!/bin/bash
list=(hadoop300 hadoop301 hadoop302)
case $1 in
"start"){
for i in ${list[@]}
do
echo ---------- kafka[ $i ]启动 ------------
ssh $i "source ~/.bash_profile;kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties"
done
};;
"stop"){
for i in ${list[@]}
do
echo ---------- kafka[ $i ]停止 ------------
ssh $i "source ~/.bash_profile;kafka-server-stop.sh stop"
done
};;
""){
echo "!"
};;
esac
然后将该脚本挂载到全局调用即可, 配置环境变量或者软连接挂载到 系统bin目录下
6、启动测试
[hadoop@hadoop300 logs]$ kafka.sh start
---------- kafka[ hadoop300 ]启动 ------------
---------- kafka[ hadoop301 ]启动 ------------
---------- kafka[ hadoop302 ]启动 ------------
[hadoop@hadoop300 logs]$ xcall jps
--------- hadoop300 ----------
1749 QuorumPeerMain
4041 Kafka
4140 Jps
--------- hadoop301 ----------
3189 Kafka
3749 Jps
1623 QuorumPeerMain
--------- hadoop302 ----------
1627 QuorumPeerMain
3164 Kafka
3724 Jps
此时打开zookeeper客户端可以看到kafka相关数据的生成在/kafka 路径下
[hadoop@hadoop300 logs]$ zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[kafka, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /kafka
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification]
[zk: localhost:2181(CONNECTED) 2]