zk集群+kafka集群搭建

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

​ 4.4使用命令java -version 验证是否安装成功

[root@VM-8-14-centos ~]# java -version
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build 1.8.0_331-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)

二.安装zookeeper

1.单机部署zookeeper

1.1.下载zookeeper包,网址:http://archive.apache.org/dist/zookeeper/

1.2.新建目录 /usr/local/zookeeper,将apache-zookeeper-3.6.1-bin.tar.gz上传到该目录。(注意:必须是带-bin的包才行)

1.3.执行以下命令解压

tar -zxf apache-zookeeper-3.6.1-bin.tar.gz

1.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一样

1.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的单机部署

2.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.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

2.3.分别启动三台服务器,检验集群状态

#分别再三台服务器的目录下执行以下命令
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin   #进入bin目录
./zkServer.sh start   # 启动zk

#查看启动状态,必须是全部都启动之后再查看状态
./zkServer.sh status

2.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.1.下载kafka包kafka_2.13-2.6.0.tgz,网址:https://archive.apache.org/dist/kafka/2.6.0/.

1.2.创建目录*/usr/local/kafka*,并将kafka_2.13-2.6.0.tgz上传到该目录

1.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

1.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

1.5.kafka的启动和停止(在kafka的bin目录下进行)

启动方式一: nohup ./kafka-server-start.sh ../config/server.properties &

启动方式一: kafka-server-start.sh -daemon ../config/server.properties

停止命令: ./kafka-server-stop.sh

1.6.查看kafka进程

# 使用命令 jps

[root@iZ3wi010xxh9e3v1ik5wntZ config]# jps
156288 QuorumPeerMain
172536 Kafka
173918 Jps

2.集群搭建kafka

前提:每台服务器已经完成kafka单机部署

2.1. 集群很简单,只需要在单机部署的前提下保证每台服务器的kafka 核心文件 server.properties中的broker.id的值不一样就行 ,改完配置文件记得重启kafka服务。

2.2. 可以在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]

3.kafka基础的操作命令

bin/ 目录下有很多的的可执行脚本

Tip1:命令行的所有参数都是两个横杠开头

Tip2:kafka 默认使用 9092 端口进行消息传送,所以集群下的每个 kafka 服务器所在的机器都需要开启 9092 访问端口,否则发送消息、接收消息会失败。

​ firewall-cmd --zone=public --add-port=9092/tcp --permanent #开启 9092 端口

​ firewall-cmd --reload #重启防火墙

​ firewall-cmd --zone=public --list-ports #查看对外成功开放的端口

Tip3:如下所有脚本参数都可以通过 ./xxx.sh --help 来进行查看

3.1.创建主题

提醒:创建成功之后,可以在 log.dirs 配置的目录下看到数据,以及在 zk 服务器的 /brokers/topics 路径也能看到数据。

# --bootstrap-server kafka服务的ip和提供的端口,集群模式的话可以逗号隔开如11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092  ,  集群模式下只写一台服务器的ip+端口也行,反正都做集群了,查的都一样
# --bootstrap-server  kafka 集群地址,格式 host1:port1,host2:port2...,也可以只写单个地址,多个地址的目的是防止服务器故障。
# --create  表示创建
# --topic   标识创建主题
# --partitions  分区数
# --replication  副本数
./kafka-topics.sh --bootstrap-server 11.10.135.202:9092 --create --topic test1 --partitions 3 --replication-factor 2

3.2.查看主题

# --list 标识要查看
# --bootstrap-server kafka服务的ip和提供的端口,集群模式的话可以逗号隔开如11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092  ,  集群模式下只写一台服务器的ip+端口也行,反正都做集群了,查的都一样
./kafka-topics.sh --list --bootstrap-server 11.10.135.202:9092

3.3.查看指定 topic 详细信息

比如分区个数,自己所属分区,副本个数,领导者机器id等等

# --describe  表示详情
./kafka-topics.sh --describe --bootstrap-server 11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092 -topic test1

3.4.删除 topic

注意:如果 server.properties 没有配置 delete.topic.enable,或者值为 false,则删除 topic 时是标记删除,不是真正的物理删除,在 log.dirs 配置的目录下仍然能看到数据,以及在 zk 服务器的 /brokers/topics 路径也能看到数据。

./kafka-topics.sh --delete --bootstrap-server 11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092 --topic test1

3.5.启动生产者

注意:回车之后就会进入生产者命令行,返回即可发送消息;9092 是默认端口,可以自己修改 conf 下的配置文件为需要的端口。

# --bootstrap-server :kafka 集群地址,格式 host1:port1,host2:port2...
# --topic:表示将消息发送到哪个topic(主题)上,topic 需要已经存在。
./kafka-console-producer.sh --bootstrap-server 11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092 --topic test1

3.6.启动消费者

# --bootstrap-server :kafka 集群地址,格式 host1:port1,host2:port2...,也可以只写单个地址,多个地址的目的是防止服务器故障。
# --from-beginning:从起始位置接收消息,比如生产者发送消息的时候,消费者还未启动,此时加上此参数就会从起始位置全部接收,否则只会接收消费者自己启动后监听到的数据。根据实际情况决定是否需要读取历史消息,不需要从头读取数据的话就不用加该选项。
# --topic:接收哪个主题上的消息
./kafka-console-consumer.sh --bootstrap-server 11.10.135.202:9092,11.10.135.207:9092,11.10.135.198:9092 --from-beginning --topic test1
  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值