作者 | 日期 | 天气 |
---|---|---|
元公子 | 2019-12-19(周四) | 阴天、小雨 |
你知道的越少,你不知道的就越少
没有朋友的点赞,就没法升级打怪
一、闲话
话说本周拖了几天没写完,昨晚发现发布了新版本。。。
Kafka 她是一个咖啡的品牌,额。。不对。她
最初是由领英开发,是一个分布式消息传递和流平台。(这个也必须要登记到阅读源码的延迟队列中.。。。)
另外,她的部署与RocketMQ来对比的话,比较简单,少了定义谁是老大的理解,只需要关心在哪启动几个节点就可以了,剩下的我们内部自己投票搞定。
额。。。对了,Kafka还需要一个男闺蜜伙伴才能使用,他叫ZooKeeper。官方配套送了一个ZooKeeper,你可以选择套餐,或者是单点选择自己安装。
二、下载安装包
官方地址:kafka.apache.org/downloads
下载最新版软件: kafka_2.13-2.4.0.tgz(使用高版本的Scala)
三、系统环境检查/准备
- Java jdk1.8以上环境
- 示例使用Centos7操作系统
- ZooKeeper中间件
四、安装Zookeeper
如客官选择官方的套餐,请参考官方文档,第二步描述如下:
bin/zookeeper-server-start.sh config/zookeeper.properties
如客官您很有个性,想自己单点的话,请参考Zookeeper部署这份菜单。
又如果,您已吃饱了,请忽略上面的废话。。。
五、单机
此章节主要讲述Kafka的单机单节点部署。
1.创建专属用户(可省略此步,直接使用root用户或者您愿意)
2.选择安装目录(在/soft文件夹放置工具软件,或者按您意思来)
解压缩
[root@hadoop-master /soft]# tar -xvzf kafka_2.13-2.4.0.tgz
[root@hadoop-master /soft]# chown -R hadoop:hadoop kafka_2.13-2.4.0
创建软连接,便于后续的软件升级或多版本切换
[root@hadoop-master /soft]# ln -s kafka_2.13-2.4.0 kafka
3.设置环境变量
文件最底部追加以下内容
[root@hadoop-master /soft]# vi /etc/profile
export KAFKA_HOME=/soft/kafka
export PATH=$PATH:$KAFKA_HOME/bin
执行保存: Esc :wq
[root@hadoop-master /soft]# source /etc/profile
4.改改配置-初段位
- 配置文件 config/server.properties。在文件中找到以下内容,浏览并修改。
# 高能提醒使用hadoop用户
[root@hadoop-master /soft]# su - hadoop
[hadoop@hadoop-master ~]$ mkdir -p ~/kafka/config
[hadoop@hadoop-master ~]$ cp /soft/kafka/config/server.properties ~/kafka/config/server.properties
[hadoop@hadoop-master ~]$ vi ~/kafka/config/server.properties
# broker的唯一标识,自然数
broker.id=0
# 监听信息,默认端口9092。PLAINTEXT://本机IP地址或域名:9092
listeners=PLAINTEXT://hadoop-master:9092
# 消息日志路径
log.dirs=/home/hadoop/kafka/data
# zookeeper连接信息。多个zookeeper用英文逗号分隔,可以用hostname或者ip地址+端口号方式填写。
zookeeper.connect=hadoop-master:2181,hadoop-master2:2181,hadoop-dn1:2181
# 是否自动创建topic,默认为true
# auto.create.topics.enable=false
执行保存: Esc :wq
-
JVM参数
在bin/kafka-server-start.sh,默认为1G,按需进行调整。
[hadoop@hadoop-master ~]$ cp /soft/kafka/bin/kafka-server-start.sh /soft/kafka/bin/kafka-server-start.sh.bak
[hadoop@hadoop-master ~]$ vi /soft/kafka/bin/kafka-server-start.sh
# 找到此行修改:export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
export KAFKA_HEAP_OPTS="-Xmx256m -Xms256m"
执行保存: Esc :wq
-
日志路径
在bin/kafka-run-class.sh,定义LOG_DIR环境变量。
[hadoop@hadoop-master ~]$ cp /soft/kafka/bin/kafka-run-class.sh /soft/kafka/bin/kafka-run-class.sh.bak
[hadoop@hadoop-master ~]$ vi /soft/kafka/bin/kafka-run-class.sh
# 参考行limitations under the License.
# 下面增加变量,后面可以在自启动服务中定义环境变量来替换。
LOG_DIR="/home/hadoop/kafka/logs"
执行保存: Esc :wq
5.启动测试
使用hadoop用户。因指令已加入到环境变量,可在随意目录下执行。
[hadoop@hadoop-master /soft/kafka]$ kafka-server-start.sh /home/hadoop/kafka/config/server.properties
# 后台启动:kafka-server-start.sh -daemon /home/hadoop/kafka/config/server.properties
[hadoop@hadoop-master /soft/kafka]$ jps
58301 Kafka
其它关联指令:
停止服务:kafka-server-stop.sh
六、集群
Kafka集群,主要还是注意两个方面。一个是每个节点的配置文件(server.properties),另外一个是日志文件存储的路径。但如果您对日志不关心的话,这方面可以忽略。这次我们还是增加难度,在一台机器部署3个服务节点。来吧,骚年。。。
为啥老弄单台,一来在练习时,多台太麻烦。二来,因为这类资料网上还是比较少。如果客官您就想要多台,看完这篇后,多台您就发挥聪明才智,自己搞定。那就与我没关系了,您是不是好厉害啊~
- 新增三个server.properties文件,并放置到集群文件夹,具体如下所示:
# 高能提醒使用hadoop用户
[hadoop@hadoop-master /soft/kafka]$ mkdir -p ~/kafka/cluster
[hadoop@hadoop-master /soft/kafka]$ cp /soft/kafka/config/server.properties ~/kafka/cluster/server-1.properties
[hadoop@hadoop-master /soft/kafka]$ cp /soft/kafka/config/server.properties ~/kafka/cluster/server-2.properties
[hadoop@hadoop-master /soft/kafka]$ cp /soft/kafka/config/server.properties ~/kafka/cluster/server-3.properties
-
编辑三个配置文件,主要修改内容broker.id、listeners、log.dirs
server-1.properties
[hadoop@hadoop-master /soft/kafka]$ vi ~/kafka/cluster/server-1.properties
broker.id=1
listeners=PLAINTEXT://hadoop-master:9093
log.dirs=/home/hadoop/kafka/cluster/server-1/data
zookeeper.connect=hadoop-master:2181,hadoop-master2:2181,hadoop-dn1:2181
执行保存: Esc :wq
server-2.properties
[hadoop@hadoop-master /soft/kafka]$ vi ~/kafka/cluster/server-2.properties
broker.id=2
listeners=PLAINTEXT://hadoop-master:9094
log.dirs=/home/hadoop/kafka/cluster/server-2/data
zookeeper.connect=hadoop-master:2181,hadoop-master2:2181,hadoop-dn1:2181
执行保存: Esc :wq
server-3.properties
[hadoop@hadoop-master /soft/kafka]$ vi ~/kafka/cluster/server-3.properties
broker.id=3
listeners=PLAINTEXT://hadoop-master:9095
log.dirs=/home/hadoop/kafka/cluster/server-3/data
zookeeper.connect=hadoop-master:2181,hadoop-master2:2181,hadoop-dn1:2181
执行保存: Esc :wq
- 新增kafka-server-stop-single.sh 脚本,以支持停止单个服务。关键是grep java 替换为$1.properties
[hadoop@hadoop-master /soft/kafka]$ cp /soft/kafka/bin/kafka-server-stop.sh ~/kafka/kafka-server-stop-single.sh
[hadoop@hadoop-master /soft/kafka]$ vi ~/kafka/kafka-server-stop-single.sh
# 覆盖原命令
PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep $1.properties | grep -v grep | awk '{print $1}')
执行保存: Esc :wq
- 新增三个启动服务,主要留意日志环境变量和相应的server.properties文件
kafka-1.service
# 高能提醒使用root用户
[root@hadoop-master /soft/kafka]# vi /etc/systemd/system/kafka-1.service
[Unit]
Description=kafka
After=syslog.target network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
Environment=JAVA_HOME=/soft/jdk
Environment=LOG_DIR=/home/hadoop/kafka/cluster/server-1/logs
ExecStart=/soft/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/cluster/server-1.properties
ExecStop=/home/hadoop/kafka/kafka-server-stop-single.sh server-1
[Install]
WantedBy=multi-user.target
执行保存: Esc :wq
[root@hadoop-master /soft/kafka]# chmod 755 /etc/systemd/system/kafka-1.service
[root@hadoop-master /soft/kafka]# systemctl enable kafka-1
kafka-2.service
# 只摘取不一样的配置
Environment=JAVA_HOME=/soft/jdk
Environment=LOG_DIR=/home/hadoop/kafka/cluster/server-2/logs
ExecStart=/soft/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/cluster/server-2.properties
ExecStop=/home/hadoop/kafka/kafka-server-stop-single.sh server-2
执行保存: Esc :wq
[root@hadoop-master /soft/kafka]# chmod 755 /etc/systemd/system/kafka-2.service
[root@hadoop-master /soft/kafka]# systemctl enable kafka-2
kafka-3.service
Environment=JAVA_HOME=/soft/jdk
Environment=LOG_DIR=/home/hadoop/kafka/cluster/server-3/logs
ExecStart=/soft/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/cluster/server-3.properties
ExecStop=/home/hadoop/kafka/kafka-server-stop-single.sh server-3
执行保存: Esc :wq
[root@hadoop-master /soft/kafka]# chmod 755 /etc/systemd/system/kafka-3.service
[root@hadoop-master /soft/kafka]# systemctl enable kafka-3
- 启动、停止这三个服务试试吧。如果不想玩了,再试试禁用服务。
- 睡觉。。。
七、服务自启动
使用root用户
[root@hadoop-master /soft/kafka]# vi /etc/systemd/system/kafka.service
# 或者 vi /lib/systemd/system/kafka.service
# 文件开始
[Unit]
Description=kafka
After=syslog.target network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
# 增加环境变量,或者在bin/kafka-run-class.sh中添加。不加的话,实验证明会报错
Environment=JAVA_HOME=/soft/jdk
Environment=LOG_DIR=/home/hadoop/kafka/logs
ExecStart=/soft/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/kafka/config/server.properties
ExecStop=/soft/kafka/bin/kafka-server-stop.sh
# 此项会导致停止进程后,又自动启动服务,很霸道
#Restart=on-failure
[Install]
WantedBy=multi-user.target
执行保存: Esc :wq
[root@hadoop-master /soft/kafka]# chmod 755 /etc/systemd/system/kafka.service
[root@hadoop-master /soft/kafka]# systemctl enable kafka
[root@hadoop-master /soft/kafka]# service kafka start
其它关联指令:
- 停止:service kafka stop
- 查看服务状态:service kafka status
- 修改服务的配置内容后,重新加载生效:systemctl daemon-reload
- 禁用开机服务(禁止后是否删除服务文件,您随意):systemctl disable kafka
- 查看服务是否开机启动:systemctl is-enabled kafka
- 查看已启动的服务列表:systemctl list-unit-files --type=service | grep enabled
八、偶遇的坑
1. 停止不了Kafka进程
我在部署时没遇到此问题,这里备案下网上大佬们的解决办法,以防有伙伴们遇到。
编辑bin/kafka-server-stop.sh脚本,解决思路:从jps中找到Kafka的进程ID
# 参考行PIDS=$(ps ax | grep -i 'kafka\.Kafka' | grep java | grep -v grep | awk '{print $1}')
# 注释掉参考行,并增加以下内容代替,'kafka.Kafka'过滤字符可根据实际情况进行调整
PIDS=$(jps -lm | grep -i 'kafka.Kafka' | awk '{print $1}')
# 或者下面的命令
#PIDS=$(ps ax | grep -i 'Kafka' | grep java | grep -v grep | awk '{print $1}')
执行保存: Esc :wq