部署ZooKeeper集群

Kafka依赖ZooKeeper,所以需要先部署ZooKeeper集群。

  • 环境准备:
主机名 IP
test1 192.168.30.128
test2 192.168.30.129
test3 192.168.30.130
  • 全部设置hosts:
vim /etc/hosts

192.168.30.128 test1
192.168.30.129 test2
192.168.30.130 test3

 

  • 全部关闭selinux和firewalld:
setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

systemctl stop firewalld && systemctl disable firewalld

 

  • 全部安装java环境:
tar zxf jdk-8u191-linux-x64.tar.gz && mv jdk1.8.0_191/ /usr/local/jdk

vim /etc/profile

JAVA_HOME=/usr/local/jdk
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/libexport JAVA_HOME PATH CLASSPATHsource !$

java -versionln -s /usr/local/jdk/bin/java /usr/bin/java

 

  • 全部下载ZooKeeper:
mkdir /software && cd /softwarewget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gztar zxf zookeeper-3.4.14.tar.gzmv zookeeper-3.4.14 /usr/local/zookeeper

 

  • 全部创建数据、日志目录及当前节点ID:
mkdir /usr/local/zookeeper/datamkdir /usr/local/zookeeper/dataLogecho 1 > /usr/local/zookeeper/data/myid                 #集群每台机器此ID不同即可

 

建议test2修改/usr/local/zookeeper/data/myid为2,test3上修改为3

  • 全部修改配置:
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

vim /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/dataLog
clientPort=2181
maxClientCnxns=1024#集群节点信息,可以是ip或主机名server.1=test1:2888:3888
server.2=test2:2888:3888
server.3=test3:2888:3888

 

tickTime:Zookeeper中最小时间单元的长度

initLimit:默认值为10,表示是tickTime的10倍。Leader服务器等待Follower启动,并完成数据同步的时间

syncLimit:默认值为5,表示是tickTime的5倍。Leader服务器和Follower之间进行心跳检测的最大延时时间

dataDir:Zookeeper服务器存储快照文件的目录

dataLogDir:ZooKeeper日志目录

clientPort:Zookeeper对外的服务端口,集群中无须保持一致

maxClientCnxns:默认是60,从Socket层面限制单个客户端与单台服务器之间的并发连接数

  • 全部时间同步:
yum install -y ntpdateecho "*/5 * * * * /usr/sbin/ntpdate time.windows.com &>/dev/null" >> /var/spool/cron/root

 

  • 全部启动ZooKeeper:
/usr/local/zookeeper/bin/zkServer.sh startnetstat -lntp |grep java                #检查端口,拥有2888端口为leader

 

为了后续启动方便,可以做个软链接

ln -s /usr/local/zookeeper/bin/zkServer.sh /usr/local/bin/zookeeper

 

  • 测试连接ZooKeeper:
/usr/local/zookeeper/bin/zkCli.sh -server test1:2181[zk: test1:2181(CONNECTED) 0] ls /[zookeeper]             #当前只有zookeeper一个节点[zk: test1:2181(CONNECTED) 1] getAcl /zookeeper'world,'anyone: cdrwa

 

连接没有问题


ZooKeeper常见用法

首先进入到ZooKeeper命令行模式下,可以进行如下操作:

  1. 查询节点
ls /

 

  1. 创建节点
create /test_node 'test node' #说明:节点名称必须以/开头,test_node为节点名称,'test node'为具体数据#创建临时节点create -e /test_node2 'ephemeral node'#创建顺序节点,它会自动加上一堆数字create -s /s_node 'sequential node'#创建临时顺序节点create -e -s /e_s_node 'ephemeral and sequential node'

 

  1. 查看节点状态
stat /test_node

 

  1. 查看节点数据内容
get /test_node

 

  1. 设置节点数据
set /test_node 'update node data' 10#说明:最后面的数字是版本号

 

  1. 删除节点
delete /test_node#注意:如果 /test_node 下有子节点,则删除会报错。可使用递归删除命令rmr /test_node

 

  1. 设置节点ACL
setAcl /test_node ip:192.168.30.129:cdrwa#cd权限用于控制子节点,rwa权限用于控制节点本身#c为创建,d为删除;r为读,w为写,a为admin

 

  1. 获取节点ACL
getAcl /test_node

 

 


部署Kafka集群

  • 全部下载Kafka:
cd /softwarewget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.1.1/kafka_2.11-2.1.1.tgztar zxf kafka_2.11-2.1.1.tgzmv kafka_2.11-2.1.1 /usr/local/kafka

 

  • 全部修改配置:
mkdir /usr/local/kafka/logs

vim /usr/local/kafka/config/server.properties

broker.id=1                 #ID唯一,建议与zookeeper的myid对应port=9092
host.name=192.168.30.128               #本机ipnum.network.threads=3               #borker进行网络处理的线程数num.io.threads=8                #borker进行I/O处理的线程数log.dirs=/usr/local/kafka/logs              #消息存放目录,不是日志目录num.partitions=1                #每个topic的默认分区数log.retention.hours=168             #消息过期时间,默认为1周default.replication.factor=2                #kafka保存消息的副本数log.cleaner.enable=false                #是否启用log压缩,一般不用启用,启用的话可以提高性能zookeeper.connect=test1:2181,test2:2181,test3:2181                #zookeeper主机名(ip)及端口

 

  • 全部启动Kafka:
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesnetstat -lntp |grep 9092

 

  • 测试:

将test1作为生产者,test3作为消费者

#test1上执行#创建一个topic lzx:一个分区,两个副本/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper test1:2181 --replication-factor 2 --partitions 1 --topic lzx              #注意:factor大小不能超过broker的个数Created topic "lzx".#创建一个生产者(消息发布者)/usr/local/kafka/bin/kafka-console-producer.sh --broker-list test1:9092 --topic lzx

 

#test3上执行#创建一个消费者(消息订阅者)/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server test1:9092  --topic lzx --from-beginning              # --from-beginning表示从开始接收,否则只接收新产生的消息

 

Kafka集群部署_集群部署

可以看到,消息生产和消费没有问题,Kafka集群部署完成。


Kafka常用命令

  1. 查看topic
/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181

 

  1. 查看topic test详情
/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

 

  1. 删除topic test(需设置参数delete.topic.enable=true)
/usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

 

  1. 生产者参数查看
/usr/local/kafka/bin/kafka-console-producer.sh

 

  1. 消费者参数查看
/usr/local/kafka/bin/kafka-console-consumer.sh