kafka是依赖zk的,所以需要安装zk
kafka支持单机和集群模式,学习阶段推荐使用单机,单机和集群在操作上是没有区别的。
1、下载
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
2、上传解压
[root@hadoop01 soft]# tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
3、修改配置文件
datadir:指向的目录存储的是zk的核心数据,所以不能使用tmp目录。
[root@bigdata01 soft]# cd apache-zookeeper-3.5.8-bin/conf
[root@bigdata01 conf]# mv zoo_sample.cfg zoo.cfg
[root@bigdata01 conf]# vi zoo.cfg
dataDir=/data/soft/apache-zookeeper-3.5.8-bin/data
4、启动zk服务
[root@hadoop01 apache-zookeeper-3.5.8-bin]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/soft/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
验证:看到QuorumPeerMain说明zk启动成功
[root@hadoop01 apache-zookeeper-3.5.8-bin]# jps
53850 QuorumPeerMain
53916 Jps
如果没有此进程,到logs看下zookeeper-*.out这个日志文件
查看当前机器中zk服务的状态
[root@hadoop01 apache-zookeeper-3.5.8-bin]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/soft/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
注意:使用zkServer.sh默认会连接本机2181端口的zk服务。
默认情况下,zk会监听此端口。之后使用的时候需要知道zk监听的是哪个端口。
1、使用zk的客户端工具连接zk,进入zk命令行
[root@hadoop01 apache-zookeeper-3.5.8-bin]# bin/zkCli.sh
Connecting to localhost:2181
...
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
默认会连接本机的zk服务;
连接特定的端口:
bin/zkCli.sh -server localhost:18127
2、操作
zk的目录结构和linux文件系统的目录结构类似。
zk的每一个目录称之为节点(ZNode),ZNode节点本身是可以存储数据的。
常见操作:
创建节点,查看节点,获取节点内容,删除节点,退出
[zk: localhost:2181(CONNECTED) 1] create /test hello
Created /test
[zk: localhost:2181(CONNECTED) 2] ls /
[test, zookeeper]
[zk: localhost:2181(CONNECTED) 3] get /test
hello
[zk: localhost:2181(CONNECTED) 4] deleteall /test
[zk: localhost:2181(CONNECTED) 5] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 6] quit
WATCHER::
WatchedEvent state:Closed type:None path:null
deleteall 是递归删除,delete只能删除空节点
1、集群节点规划
使用三个节点搭建zk集群。(hadoop01,02,03)
2、下载、上传,解压
3、修改配置
3.1、修改配置文件
[root@bigdata01 soft]# cd apache-zookeeper-3.5.8-bin/conf/
[root@bigdata01 conf]# mv zoo_sample.cfg zoo.cfg
dataDir=/data/soft/apache-zookeeper-3.5.8-bin/data
server.0=hadoop01:2888:3888
server.1=hadoop02:2888:3888
server.2=hadoop03:2888:3888
两个端口号:进行对等体连接
更具体的说,使用这两个端口号使得follwers能够在不同的情况下连接leader
第一个端口号:当一个新的leader出现时,由TCP协议,使用此端口号可以连接leader
第二个端口号:用来进行leader的选举。
Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.
3.2、创建myid文件
myid文件的值=zoo.cfg中server后指定的编号
例如:0对应hadoop01这台机
[root@bigdata01 conf]#cd /data/soft/apache-zookeeper-3.5.8-bin
[root@bigdata01 apache-zookeeper-3.5.8-bin]# mkdir data
[root@bigdata01 apache-zookeeper-3.5.8-bin]# cd data
[root@bigdata01 data]# echo 0 > myid
4、拷贝到其他两个节点、修改myid
拷贝
[root@hadoop01 soft]# scp -rq apache-zookeeper-3.5.8-bin hadoop02:/data/soft/
[root@hadoop01 soft]# scp -rq apache-zookeeper-3.5.8-bin hadoop03:/data/soft/
修改myid
[root@bigdata02 ~]# cd /data/soft/apache-zookeeper-3.5.8-bin/data/
[root@bigdata02 data]# echo 1 > myid
5、启动zk集群
分别在三个节点上启动zk进程
[root@bigdata01 apache-zookeeper-3.5.8-bin]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/soft/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
验证:
[root@hadoop03 apache-zookeeper-3.5.8-bin]# jps
17986 Jps
17946 QuorumPeerMain
查看:
三个节点中有一个是leader,其他两个是follower
[root@hadoop03 apache-zookeeper-3.5.8-bin]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/soft/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
kafka在启动的过程中需要开启zk。
kafka启动的时候不需要scala环境,只有编译源码的时候需要, 运行的时候是在jvm运行的,所以需要jdk环境就可。
a. 下载、上传、解压
b. 修改配置参数
修改默认默认目录即可
[root@bigdata01 kafka_2.12-2.4.1]# cd kafka_2.12-2.4.1/config/
[root@bigdata01 config]# vi server.properties
log.dirs=/data/soft/kafka_2.12-2.4.1/kafka-logs
c. 启动kafka和关闭
[root@hadoop01 kafka]# bin/kafka-server-start.sh -daemon config/server.properties
[root@hadoop01 kafka]# jps
57105 QuorumPeerMain
60132 Jps
59710 Kafka
[root@hadoop01 kafka]# bin/kafka-server-stop.sh
1、节点规划
三个节点(Hadoop01,02,03)。
三个节点没有主从之分,所有节点都是一样的
2、单个节点配置
针对集群模式需要修改
- broker.id:集群节点id编号,单机模式不用修改。默认是从0开始进行递增。
- listeners:默认监听9092端口
- log.dirs:注意:这个目录不是存储日志的,是存储Kafka中核心数据的目录,这个目录默认是指向的tmp目录,所以建议修改一下
- zookeeper.connect:
依赖的zk集群的地址,可以指定及集群中的一个或多个节点,多个节点逗号隔开。
针对单机模式,如果kafka和zk在一个节点上,并且zk监听的端口是默认的2181,则不需要修改
配置:
[root@hadoop01 soft]# cd kafka_2.12-2.4.1/config/
[root@hadoop01 config]# vim server.properties
broker.id=0
log.dirs=/data/kafka-logs
zookeeper.connect=bigdata01:2181,bigdata02:2181,bigdata03:2181
发送kafka到其他两个节点
[root@hadoop01 soft]# scp -rp kafka hadoop03:/data/soft/
3、其他节点修改broker.id
[root@bigdata03 ~]# cd /data/soft/kafka_2.12-2.4.1/config/
[root@bigdata03 config]# vi server.properties
broker.id=2
4、启动集群
分别在三个节点启动kafka进程
[root@hadoop02 kafka]# bin/kafka-server-start.sh -daemon config/server.properties
jps验证。