1. 下载Kafka安装包
2. 解压到指定路径下
本次安装的Kafka为2.1.1版本,注意:压缩包前面的版本号为Scala版本号,而后面的才是Kafka版本号
tar -xzvf kafka_2.11-2.1.1.tgz -C /opt/module/
3. 配置环境变量
通过修改/etc/profile
文件设置KAFKA_HOME环境变量,并将bin目录增加到PATH环境变量中
sudo vim /etc/profile
添加以下内容
# Set $KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka_2.11-2.1.1
# Add $KAFKA_HOME/bin to PATH
export PATH=$PATH:$KAFKA_HOME/bin
重新加载profile文件,验证环境变量
source /etc/profile
echo $KAFKA_HOME
4. 修改配置文件config/server.properties
1)设置Broker ID
Kafka集群中每个主机即Broker的ID必须不同
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
2)设置Kafka日志以及数据存放路径
此路径设置的日志和数据的共同存储路径,即各种Partition的数据也存储在此路径下
log.dirs=/opt/module/kafka_2.11-2.1.1/logs
3)开启管理工具的删除Topic功能
如果不开启开启此功能,那么使用命令行删除Topic时只会是标记删除,实际上并未删除,当再次创建同名Topic时就会报错无法创建
delete.topic.enable=true
4)配置Zookeeper集群
Zookeeper服务器集群的客户端端口要与Zookeeper中配置的端口一致
zookeeper.connect=zkServer1:2181,zkServer2.2181,zkServer3.2181
5)具体配置
#broker的全局唯一编号,不能重复
broker.id=1
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka_2.11-2.1.1/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#log segment滚动条件:文件大小
log.segment.bytes=1073741824
#周期性检查log segment文件是否可以删除
log.retention.check.interval.ms=300000
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
#zookeeper连接认定超时时间
zookeeper.connection.timeout.ms=6000
#设置rebalance的延迟时间
group.initial.rebalance.delay.ms=0
6)测试
启动当前主机Kafka
bin/kafka-server-start.sh config/server.properties
关闭当前主机Kafka
bin/kafka-server-stop.sh
7)将Kafka分发给其他主机并修改对应的Broker ID即可
scp -r /opt/module/kafka_2.11-2.1.1 hadoop102:/opt/module/
scp -r /opt/module/kafka_2.11-2.1.1 hadoop103:/opt/module/
8)编写脚本控制Kafka集群
编写Kafka群起脚本,通过脚本控制Kafka集群。此处提供脚本模板,仅供参考,具体使用之前记得更改其中Kafka安装路径,以及实现主机间ssh免密登录或者更改ssh命令指定每次连接时使用的私钥
# 此脚本用于启动/停止Kafka集群
# 输入的参数只能为start/stop
# 判断参数个数
if (($# > 1)); then
echo "Wrongs parameters!"
exit 1
fi
# 获取当前时间(相对时间)
start_time=$(date +%s)
# 获取操作方式
operation=$1
# 设置Kafka集群
cluster=${KAFKA_CLUSTER:-"hadoop101 hadoop102 hadoop103"}
# 对kafka集群进行对应的操作
case "$operation" in
start)
echo "----------Starting kafka cluster----------"
for host in $cluster; do
echo "----------Starting kafka in [$host]----------"
ssh $host "source /etc/profile;
KAFKA_HOME=\${KAFKA_HOME:-'/opt/module/kafka_2.11-2.1.1'};
cd \$KAFKA_HOME;
nohup ./bin/kafka-server-start.sh config/server.properties > /dev/null 2>&1 &
"
done
;;
stop)
echo "----------Stopping kafka cluster----------"
for host in $cluster; do
echo "----------Starting kafka in [$host]----------"
ssh $host "source /etc/profile;
KAFKA_HOME=\${KAFKA_HOME:-'/opt/module/kafka_2.11-2.1.1'};
cd \$KAFKA_HOME;
./bin/kafka-server-stop.sh
"
done
;;
*)
echo "Worong Parameter!"
exit 1
;;
esac
# 获取结束时间
end_time=$(date +%s)
execution_time=$((${end_time} - ${start_time}))
echo -e "\n----------$operation kafka in [$cluster] takes ${execution_time} seconds----------\n"