KAFKA及ZK搭建
1. KAFKA及ZK下载
https://archive.apache.org/dist/kafka/2.0.0/kafka-2.0.0-src.tgz
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz
2. zk安装
1、解压
tar -zxvf zookeeper-3.4.12.tar.gz
2、修改环境变量
vi /etc/profile
export ZOOKEEPER_HOME=/data/zk/zookeeper-3.4.12
export PATH=
P
A
T
H
:
PATH:
PATH:ZOOKEEPER_HOME/bin
source /etc/profile
3、创建文件夹
mkdir /data/zk/zookeeper-3.4.12/zdata
mkdir /data/zk/zookeeper-3.4.12/log
修改目录属主权限
4、修改配置文件
先备份配置文件,并重命名
cd /data/zk/zookeeper-3.4.12/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改内容
dataDir=/data/zk/zookeeper-3.4.12/zdata
dataLogDir=/data/zk/zookeeper-3.4.12/log
添加内容
server.1=192.168.189.130:2888:3888
server.2=192.168.189.131:2888:3888
server.3=192.168.189.133:2888:3888
5、在 /data/zk/zookeeper-3.4.12/zdata目录下创建myid文件
vi myid
1
第2,3个节点myid内容分别为2,3 ,与zoo.cfg里面配置对应
6、把zookeeper的目录复制到其他两个机器
cd /data/zk
scp myroot@192.168.189.130:/data/zk/zookeeper-3.4.12.tar.gz .
7、修改2.3机器的环境变量
8、修改2,3机器的myid文件
9、全部启动
cd /data/zk/zookeeper-3.4.12/bin
sh zkServer.sh start
10、查看状态
sh zkServer.sh status
如出现下面信息则安装成功,其中有一个为leader(3台都启动后,status状态才正常,一台启动直接看状态会报错Error contacting service. It is probably not running.3台都启动后,错误消失)
[root@localhost bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zl/zookeeper-3.4.12/bin/…/conf/zoo.cfg
Mode: leader
二、搭建kafka
1、解压包即可
cd /data/kakfa
tar -xzvf kafka_2.12-2.3.0.tgz
2、配置
创建KAFKA数据存储目录
cd /data/kafka/
mkdir kafka-logs
(1) 编辑kafka server的配置文件
vi /data/kakfa/kafka_2.12-2.3.0/config/server.properties
#broker的全局唯一编号,不能重复,依次增长
broker.id=0
#默认值,往kafka里写数据用的端口
port=9092
#删除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=/data/kafka/kafka-logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=192.168.189.130:2181,192.168.189.131:2181,192.168.189.133:2181
#连接zookeeper的超时时间
zookeeper.connection.timeout.ms=1000000
(2) 更改关联的ZK配置信息
vim config/zookeeper.properties
dataDir=/data/zk/zookeeper-3.4.12/zdata # 指定 zookeeper 的目录,如果不存在则需要创建
tickTime=2000 # 客户端与服务器之间维持心跳的时间间隔
initLimit=20
syncLimit=10
server.1=192.168.189.130:2888:3888 # 2888 表示的是 zookeeper 集群中 Leader 的端口
server.2=192.168.189.131:2888:3888 # 3888 表示的是如果 Leader 宕掉了,那么从 3888 端口中重新选举新的Leader
server.3=192.168.189.132:2888:3888
3、分发kafka
用scp把kafka拷贝到另外两台主机即可;
唯一区别的,就是server.properties中的broker.id,要设置为1和2
三、启动kafka
1、启动zookeeper集群
2、启动kafka集群
[root@seichung ] cd /data/kafka/kafka_2.12-2.3.0/bin
./kafka-server-start.sh -daemon /data/kakfa/kafka_2.12-2.3.0/config/server.properties
(以上命令要用手敲)
若启动失败,查看日志
cd …/logs
cat server.log
##jps 命令查看
3、部分命令
1、查看当前服务器中的所有topic
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --zookeeper 192.168.189.133:2181 --list
2、创建topic
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --zookeeper 192.168.189.133:2181 --create --replication-factor 3 --partitions 1 --topic first1
–topic 定义topic名
–replication-factor 定义副本数
–partitions 定义分区数
当前可用kafka的broker为3,当想创建replication-factor为4时,报错:
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --zookeeper 192.168.189.133:2181 --create --replication-factor 4 --partitions 1 --topic first2
3、删除topic
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --zookeeper 192.168.189.133:2181 --delete --topic first1
需要在server.properties中设置delete.topic.enable=true否则只是标记删除;
标记删除:
当没有设置delete.topic.enable=true时,删除topic是标记删除,需要去数据目录中删除数据文件,然后用命令删除topic,
还要去zookeeper里删除一些元数据:
[zk: localhost:2181(CONNECTED) 1] rmr /brokers/topics/topic名字
[zk: localhost:2181(CONNECTED) 1] rmr /admin/delete_topics/topic名字
4、查看某个topic的详情
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --zookeeper 192.168.189.133:2181 --describe --topic first1
5、更多
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-topics.sh --help
6、生产、消费消息
/生产者:
[root@testx-three local]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-console-producer.sh --broker-list 192.168.189.133:9092 --topic first1
/消费者:
[root@testx-three ~]# /data/kafka/kafka_2.12-2.3.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.189.133:9092 --topic first1 --from-beginning
7、查看producer生产消息的最大位置(一周过期)
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.189.133:9092 --topic t0425 --time -1
-1表示查询topic各个分区当前最大的消息位移值(这里的位移不是consumer端的位移,而是指消息在每个分区的位置);
如果你要查询曾经生产过的最大消息数,那么只运行上面这条命令然后把各个分区的结果相加就可以了。
但如果你需要查询当前集群中该topic的消息数,那么还需要运行下面这条命令:
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.189.133:9092 --topic t0425 --time -2
-2表示去获取当前各个分区的最小位移,之后把运行第一条命令的结果与刚刚获取的位移之和相减就是集群中该topic的当着消息总数。