Centos7部署zookeeper和Kafka集群
Centos7部署zookeeper和Kafka集群
1 环境
java环境
三台服务器
必须解析域名
#cat /etc/hosts 10.6.76.27 kafka1 10.6.76.28 kafka2 10.6.76.18 kafka3
2 下载
kafka下载http://kafka.apache.org/downloads
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka-2.3.0-src.tgz
zookeeper下载 https://www.apache.org/dyn/closer.cgi/zookeeper/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
3 安装zookeeper
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
在zookeeper的选举过程中,为了保证选举过程最后能选出leader,就一定不能出现两台机器得票相同的僵局,所以一般的,要求zk集群的server数量一定要是奇数,也就是2n+1台,并且,如果集群出现问题,其中存活的机器必须大于n+1台,否则leader无法获得多数server的支持,系统就自动挂掉。所以一般是3个或者3个以上节点。
https://www.cnblogs.com/raphael5200/p/5285267.html
https://www.cnblogs.com/raphael5200/p/5285583.html
cd /home/admin #我的软件目录 sudo chown -R admin zookeeper* tar -zxf zookeeper-3.4.14.tar.gz mv zookeeper-3.4.14 /home/admin/elk mkdir /home/admin/elk/zookeeper/data
#配置文件
#[admin@pe-jira conf]$ pwd #/home/admin/elk/zookeeper/conf #[admin@pe-jira conf]$ cat zoo.cfg tickTime=2000 # Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。毫秒为单位。 initLimit=10 #集群中的follower服务器(F)与leader服务器(L)之间第一次连接最大的连接次数 syncLimit=5 #集群中的follower与leader之间发送和应答时间,能容忍的最多心跳数(tickTime的数量)。超出这个视为不可用 dataDir=/home/admin/elk/zookeeper/data clientPort=2181 server.1=kafka1:2888:3888 server.2=kafka2:2888:3888 server.3=kafka-03:2888:3888
#同步数据
cd /home/admin/elk scp -r zookeeper kafka2:~/elk scp -r zookeeper kafka3:~/elk
#创建myid文件
创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)在其他节点上一定要修改myid的内容
echo "1" >>/home/admin/elk/zookeeper/data/myid
#启动集群
#分别启动zk cd /home/admin/elk/zookeeper/bin ./zkServer.sh start
#端口检测
netstat -lntup|grep 2181
#查看角色状态
./zkServer.sh status
4 安装kafka
https://www.cnblogs.com/saneri/p/8762168.html
cd /home/admin/soft tar -zxf kafka_2.11-2.3.0.tgz mv kafka_2.11-2.3.0 kafka mv kafka /home/admin/elk/ cd /home/admin/elk/kafka/
4.1 #同步
cd /home/admin/elk/ scp -r kafka kafka2:~/elk scp -r kafka kafka3:~/elk
4.2 #配置文件
#[admin@pe-jira config]$ egrep -v "^$|#" server.properties broker.id=1 #三台不能一致 listeners=PLAINTEXT://10.6.76.27:9092 #本机IP num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/tmp/kafka-logs num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=24 #日志保留时间,默认7天168小时 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181 #3台zookeeper地址,可以IP也可以解析的域名 zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=0
4.3 #启动
/home/admin/elk/kafka/bin/kafka-server-start.sh -daemon /home/admin/elk/kafka/config/server.properties
4.4 #验证
4.4.1 进程验证
[admin@pe-jira elk]$ jps 13236 Kafka 6413 QuorumPeerMain 14958 Jps 8191 Bootstrap [admin@pe-jira elk]$
4.4.2 topic验证
#创建topic
cd /home/admin/elk/kafka; /home/admin/elk/kafka/bin/kafka-topics.sh --create --zookeeper kafka1:2181, kafka2:2181, kafka3:2181 --replication-factor 3 --partitions 3 --topic logstashtest
#显示topic
其他机器
/home/admin/elk/kafka/bin/kafka-topics.sh --describe --zookeeper kafka1:2181, kafka2:2181, kafka3:2181 --topic logstashtest
#列出topic
/home/admin/elk/kafka/bin/kafka-topics.sh --list --zookeeper kafka1:2181, kafka2:2181, kafka3:2181
#删除topic
/home/admin/elk/kafka/bin/kafka-topics.sh --delete --zookeeper kafka1:2181, kafka2:2181, kafka3:2181 --topic logstashtest /home/admin/elk/kafka/bin/kafka-topics.sh --list --zookeeper kafka1:2181, kafka2:2181, kafka3:2181
4.4.3 创建消息验证zk和kafka的结合
https://www.cnblogs.com/AK47Sonic/p/7629069.html
创建topic
/home/admin/elk/kafka/bin/kafka-topics.sh --create --zookeeper kafka1:2181, kafka2:2181, kafka3:2181 --replication-factor 3 --partitions 3 --topic messagetest
producer(生产者)生产消息
/home/admin/elk/kafka/bin/kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9092,kafka3:9092 --topic messagetest
消费者(consumer)测试消费
新版本消费者去掉了对zookeeper的依赖,当启动一个消费者时不再向zookeeper注册,而是由消费组协调器统一管理,已消费的消息偏移量提交后会保存到名为“__consumer_offsets”内部主题中启动一个新的消费者
这个__consumer_offsets topic也不允许删除
/home/admin/elk/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 --topic messagetest --from-beginning