kafka集群搭建
本文环境:Java jdk 1.8 + zookeeper 3.6.1 + kafka 2.6.0 + CentOS 7.2
准备服务器:三台linux服务器分别是 11.10.135.198 、11.10.135.202 、11.10.135.207
前置说明:zookeeper 运行 需要依赖 jdk, kafka 运行需要依赖zokeeper, 所以需要先安装jdk, 然后安装zookeeper, 然后才能安装kafka
一. 安装jdk
1.从官网https://www.oracle.com/java/technologies/downloads/#java8下载jdk包上传至服务器,我下载的版本是jdk-8u162-linux-x64.tar.gz
2.新建目录 /usr/local/java
,将jdk-8u162-linux-x64.tar.gz包放至该目录下
3.解压jdk-8u162-linux-x64.tar.gz包
tar -zxvf jdk-8u162-linux-x64.tar.gz
4.配置环境变量
4.1.打开环境变量文件
vi /etc/profile
4.2.将下面内容粘到该文件末端(注意自己jdk的路径)
export JAVA_HOME=/usr/local/java/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
4.3.保存并退出,然后执行以下命令使配置内容生效
source /etc/profile
二.安装zookeeper
1.单机部署zookeeper
1.下载zookeeper包,网址:http://archive.apache.org/dist/zookeeper/
2.新建目录 /usr/local/zookeeper
,将apache-zookeeper-3.6.1-bin.tar.gz上传到该目录。(注意:必须是带-bin的包才行)
3.执行以下命令解压
tar -zxf apache-zookeeper-3.6.1-bin.tar.gz
4.为zookeeper
准备配置文件
# 进去zk的根目录
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin
# zookeeper 根目录下创建data目录
mkdir data
# 进入conf目录
cd /home/zookeeper/zookeeper-3.4.10/conf
# 复制配置文件
cp zoo_sampe.cfg zoo.cfg
# 查看zoo.cfg,并编辑里面的dataDir属性
dataDir=/usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data #就是前两步新建的那个data路径,此路径用于存储zookeeper中数据的内存快照、及事务日志文件,虽然zookeeper是使用内存的,但是需要持久化一些数据来保证数据的安全,和redis一样
5.启动zookeeper
# 进入zookeeper的bin目录
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin
# 启动zookeeper
./zkServer.sh start
# 启动: zkServer.sh start
# 停止: zkServer.sh stop
# 查看状态:zkServer.sh status
# 进入zookeeper 内部, 进入zk客户端可以进行命令操作
./zkCli.sh
2.集群搭建zookeeper
注:搭建zk集群其实很简单,就是在单机部署的前提下做些配置文件的修改。需要注意的是,zookeeper集群数量必须满足2n+1(n>0),所以必须每个节点都启动之后再查看状态才行,否则只启动一台的时候,执行./zkServer.sh status命令查看状态会报错。
前提: 三台服务器都已经完成了zk的单机部署
1.修改服务器对应配置文件,每台服务器都需要修改
# 服务器对应端口号
clientPort=2181
# 数据快照文件所在路径
dataDir=/usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data
# 集群配置信息
# server:A=B:C:D
# A:是一个数字,表示这个是服务器的编号
# B:是这个服务器的ip地址
# C:Zookeeper服务器之间通信的端口(数据互通,必须的)
# D:Leader选举的端口
server.1=11.10.135.198:2288:3388
server.2=11.10.135.202:2288:3388
server.3=11.10.135.207:2288:3388
2.在上一步 dataDir
指定的目录下,创建myid
文件,然后在该文件添加上一步server
配置的对应A
数字
# 11.10.135.198对应的数字为1
# /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data目录(即dataDir的目录下)下执行命令
echo "1" > myid
# 11.10.135.202对应的数字为2
# /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data目录(即dataDir的目录下)下执行命令
echo "2" > myid
# 11.10.135.207对应的数字为3
# /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/data目录(即dataDir的目录下)下执行命令
echo "3" > myid
3.分别启动三台服务器,检验集群状态
#分别再三台服务器的目录下执行以下命令
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin #进入bin目录
./zkServer.sh start # 启动zk
#查看启动状态,必须是全部都启动之后再查看状态
./zkServer.sh status
4.集群启动后每台服务器的状态如下:
# 在11.10.135.198服务器查看
[root@iZ3wi010xxh9e3v1ik5wnuZ bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
# 在11.10.135.202服务器查看
[root@iZ3wi010xxh9e3v1ik5wntZ bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
# 在11.10.135.207服务器查看
[root@iZ3wi010xxh9e3v1ik5wntZ bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
安装kafka
1.单机部署kafka
注: 以11.10.135.198服务器为例
1.下载kafka包kafka_2.13-2.6.0.tgz,网址:https://archive.apache.org/dist/kafka/2.6.0/
2.创建目录/usr/local/kafka
,并将kafka_2.13-2.6.0.tgz上传到该目录
3.解压 kafka_2.13-2.6.0.tgz, 并创建logs目录
cd /usr/local/kafka
# 解压到当前目录
tar -zxvf kafka_2.13-2.6.0.tgz
# 查看解压结构
[root@iZ3wi010xxh9e3v1ik5wntZ kafka]# ls
kafka_2.13-2.6.0 kafka_2.13-2.6.0.tgz
# 进入kafka跟目录
[root@iZ3wi010xxh9e3v1ik5wntZ kafka]# cd kafka_2.13-2.6.0/
# 查看目录结构
[root@iZ3wi010xxh9e3v1ik5wntZ kafka_2.13-2.6.0]# ls
bin config libs LICENSE NOTICE site-docs
# 新加logs目录(注意这个目录就是 kafka 的数据存放目录,kafka 以日志的形式存储数据)
[root@iZ3wi010xxh9e3v1ik5wntZ kafka_2.13-2.6.0]# mkdir logs
# 再次查看目录结构
[root@iZ3wi010xxh9e3v1ik5wntZ kafka_2.13-2.6.0]# ls
bin config libs LICENSE logs NOTICE site-docs
4.修改kafka 核心文件 server.properties (在目录/usr/local/kafka/kafka_2.13-2.6.0/config下)
# 主要是修改如下参数
#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#当前服务器的ip和提供服务的端口号
listeners=PLAINTEXT://11.10.135.198:9092
#kafka的消息存储文件(即前几步新建的那个logs目录)
log.dirs=/usr/local/kafka/kafka_2.13-2.6.0/logs
#kafka连接zookeeper的地址(zk是集群的话需要逗号隔开)
zookeeper.connect=11.10.135.198:2181,11.10.135.202:2181,11.10.135.207:2181
5.kafka的启动和停止(在kafka的bin目录下进行)
启动方式一: nohup ./kafka-server-start.sh ../config/server.properties &
启动方式一: kafka-server-start.sh -daemon ../config/server.properties
停止命令: ./kafka-server-stop.sh
6.查看kafka进程
# 使用命令 jps
[root@iZ3wi010xxh9e3v1ik5wntZ config]# jps
156288 QuorumPeerMain
172536 Kafka
173918 Jps
2.集群搭建kafka
前提:每台服务器已经完成kafka单机部署
-
集群很简单,只需要在单机部署的前提下保证每台服务器的kafka 核心文件 server.properties中的broker.id的值不一样就行 ,改完配置文件记得重启kafka服务。
-
可以在zookeeper中看下是否将kafka的节点注册进去了
# 随便找台集群zk的服务器,进入zk的bin目录 [root@iZ3wi010xxh9e3v1ik5wntZ bin]# cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin # 连接zk客户端 [root@iZ3wi010xxh9e3v1ik5wntZ bin]# ./zkCli.sh # 查看根目录的子目录 [zk: localhost:2181(CONNECTED) 0] ls / [admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper] # 查看/brokers/ids已经存在0,1,2, 说明kafka集群的三个broker节点已经注册进去了 [zk: localhost:2181(CONNECTED) 1] ls /brokers/ids [0, 1, 2]