Zookeeper+Kafka
1.环境介绍
Centos7
JDK1.8
Zookeeper-3.4.14
Kafka_2.11-1.1.1
192.168.10.232 zk+Kafka node1
192.168.10.230 zk+kafka node2
192.168.10.229 zk+kafka node3
2.部署Zookeeper集群
2.1安装JDK
...
2.2安装zk
解压到/home
tar -xvf zookeeper-3.4.14.tar.gz -C /home/
修改配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper
clientPort=2181
server.1=192.168.10.232:2888:3888
server.2=192.168.10.230:2888:3888
server.3=192.168.10.229:2888:3888
zoo.cfg配置文件详解:
2888&3888端口:2888端口是zookeeper服务之间通信的,3888端口用于内部选举
clientPort:连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
tickTime:zookeeper中的基本时间单元,代表发送心跳的间隔时间,单位是毫秒;
initLimit:用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端和leader连接失败。总的时间为:10*2000=20秒;
dataDir:是zookeeper持久化存放数据存放的目录;.
syncLimit:Leader和Follower之间发送消息时,请求和应答的时间长度,最长不能超过多少个tickTime的时间长度,默认值为5,所以总的时间为5*2000=10秒;
创建数据目录并创建myid文件
mkdir /opt/zookeeper
echo 1 > /opt/zookeeper/myid
将目录复制到node2、node3,创建数据目录并修改myid文件
scp -r /home/zookeeper node2:/home/
scp -r /home/zookeeper node3:/home/
ssh node2 mkdir /opt/zookeeper
ssh node3 mkdir /opt/zookeeper
ssh node2 echo 2 > /opt/zookeeper/myid
ssh node3 echo 2 > /opt/zookeeper/myid
启动zookeeper(在三个节点上执行此命令)
./bin/zkServer.sh start &
启动后可以在当前目录下看zookeeper.out的日志
./bin/zkServer.sh start-foreground & #前台运行
执行./bin/zkServer.sh status,可以看到当前节点的角色
zookeeper命令:
连接zk:
./bin/zkCli.sh -server 192.168.10.232(节点IP)
创建节点:
create /test123 "test"
其他两个节点同步
test:为节点信息
获取节点信息:
get /test123
修改节点信息:
set /test123 test1
删除节点:
delete /test123
其他两个节点同步删除
!!!注意 :
在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。如果只部署2个zk进程,当其中一个zk进程挂掉后,剩下的一个进程并不能构成一个quorum的大多数。因此,部署2个进程甚至比单机模式更不可靠,因为2个进程其中一个不可用的可能性比一个进程不可用的可能性还大。
3.部署Kafka集群
解压Kafka
tar -xvf kafka_2.11-1.1.1.tgz -C /home/
配置
ID(node2和node3为1、2)
broker.id=0
#删除topic配置
delete.topic.enable=true
#关闭自动创建topic
auto.create.topics.enable=false
修改kafka地址
advertised.host.name=192.168.10.232
修改数据目录
log.dirs=/opt/kafkaLogs
修改zookeeper连接
zookeeper.connect=192.168.10.232:2181,192.168.10.230:2181,192.168.10.229:2181
注意:
auto.create.topics.enable=false:
如果设为true,那么produce,consume或者fetch metadata一个不存在的topic时,就会自动创建一个默认replication factor和partition number的topic。默认是true
advertised.host.name:
参数用来配置返回的host.name值,把这个参数配置为IP地址。这样客户端在使用java.net.InetAddress.getCanonicalHostName()获取时拿到的就是ip地址而不是主机名。
创建数据目录
mkdir /opt/kafkaLogs
将目录复制到node2、node3,修改配置ID和地址,并创建数据目录
scp -r /home/kafka node2:/home/
scp -r /home/kafka node3:/home/
node2:vim /home/kafka/conf/server.properties
node3:vim /home/kafka/conf/server.properties
ssh node2 mkdir /opt/kafkaLogs
ssh node2 mkdir /opt/kafkaLogs
启动kafka(node2,node3相同)
./bin/kafka-server-start.sh -daemon config/server.properties &
停止kafka
./bin/kafka-server-stop.sh
测试集群:
node1创建test123的topic:
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 31--topic test123
注意:为Topic创建分区时,--partitions(分区数)最好是broker数量的整数倍,这样才能使一个Topic的分区均匀的分布在整个Kafka集群中
创建生产者,并输入内容
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test123
node2、node3输入命名即可查看到在node1发送的内容
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test123 --from-beginning
查看topic:./bin/kafka-topics.sh --list --zookeeper localhost:2181
删除topic:./bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test123
安装Kafka-manager(图形化)
作用:
管理多个不同的集群;
很容易地检查集群的状态(topics, brokers, 副本的分布, 分区的分布);
选择副本;
产生分区分配(Generate partition assignments)基于集群的当前状态;
重新分配分区。
安装sbt
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
yum install -y sbt
安装kafka-manager
git clone https://github.com/yahoo/kafka-manager.git
cd kafka-manager
sbt clean dist(需要15分钟)
编译完成后在~/target/universal/生成一个zip包
cp target/universal/kafka-manager-2.0.0.2.zip .
unzip kafka-manager-2.0.0.2.zip
cd kafka-manager-2.0.0.2
vim conf/application.conf
修改
kafka-manager.zkhosts="192.168.10.232:2181,192.168.10.230:2181,192.168.10.229:2181"
启动kafka-manager:
./bin/kafka-manager
默认是监听9000端口,可以在启动时指定配置文件和监听端口
./bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080
后台运行:
nohup bin/kafka-manager > /dev/null 2>&1 &
访问:
192.168.10.232:9000
添加集群即可.