部署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命令行模式下,可以进行如下操作:
- 查询节点
ls /
- 创建节点
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'
- 查看节点状态
stat /test_node
- 查看节点数据内容
get /test_node
- 设置节点数据
set /test_node 'update node data' 10#说明:最后面的数字是版本号
- 删除节点
delete /test_node#注意:如果 /test_node 下有子节点,则删除会报错。可使用递归删除命令rmr /test_node
- 设置节点ACL
setAcl /test_node ip:192.168.30.129:cdrwa#cd权限用于控制子节点,rwa权限用于控制节点本身#c为创建,d为删除;r为读,w为写,a为admin
- 获取节点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常用命令
- 查看topic
/usr/local/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
- 查看topic test详情
/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
- 删除topic test(需设置参数delete.topic.enable=true)
/usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
- 生产者参数查看
/usr/local/kafka/bin/kafka-console-producer.sh
- 消费者参数查看
/usr/local/kafka/bin/kafka-console-consumer.sh