备注:kafka依赖于zookeeper集群,所以先介绍和搭建zookeeper
Zookeeper简介:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据生态中的重要组件。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户
Zookeeper工作流程是首先选举一个服务器作为leader,leader会更新服务器状态、数据交互。当集群中其他服务器learner会更新服务器状态、数据交换。当前leader失联时,其他服务器会选举投票产生一个新的learner。
Kafka简介:
Kafka 最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper 协调的分布式消息系统,用 Scala 语言编写。
Kafka 目前主要作为一个分布式的发布订阅式的消息系统使用,具备可扩展、可持久化、可靠性、高吞吐、低延迟的能力,支持高并发场景。
集群环境:
主机名 | IP |
---|---|
kafka_zk_01 | 192.168.2.70 |
kafka_zk_02 | 192.168.2.71 |
kafka_zk_03 | 192.168.2.72 |
一、修改系统环境
首先将防火墙2181,9092端口放开,安装好JDK8以上,并且配置好JAVA_HOME和PATH,是环境变量生效。
二、安装zookeeper
将http://zookeeper.apache.org/下载好的zookeeper.tar.gz上传到三台服务器上,然后对zookeeper-3.4.5.tar.gz进行解压缩操作:
[root @kafka_zk_01~]# mkdir -p /usr/zookeeper/{data,log}
[root @kafka_zk_01~]# tar -zxvf zookeeper-3.4.13.tar.gz
[root @kafka_zk_01~]# mv zookeeper-3.4.13 /usr/local/zookeeper
然后进入zookeeper/conf目录(将zoo_sample.cfg修改为zoo.cfg)
cp zoo_sample.cfg zoo.cfg
打开zoo.cfg文件:
修改一下配置:
dataDir=/usr/zookeeper/data
dataLogDir=/usr//zookeeper/log
server.1=192.168.2.70:2888:3888 (主机名, 心跳端口、数据端口)
server.2=192.168.2.71:2888:3888
server.3=192.168.2.72:2888:3888
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=1024
ickTime:Zookeeper中最小时间单元的长度
initLimit:默认值为10,表示是tickTime的10倍。Leader服务器等待Follower启动,并完成数据同步的时间
syncLimit:默认值为5,表示是tickTime的5倍。Leader服务器和Follower之间进行心跳检测的最大延时时间
dataDir:Zookeeper服务器存储快照文件的目录
dataLogDir:ZooKeeper日志目录
maxClientCnxns:默认是60,从Socket层面限制单个客户端与单台服务器之间的并发连接数
在data目录创建一个文件myid,里面写一个1,如下所示:
echo 1 > /usr/zookeeper/data/myid
然后将修改好的复制到192.168.2.71和192.168.2.72上面
然后分别将192.168.2.71和192.168.2.72的myid修改为2和3
至此Zookeeper搭建结束,下面开始启动Zookeeper,分别启动:
如果你不想切换到Zookeeper目录启动,可以配置环境变量:
vi /etc/profile(修改文件)
export ZOOKEEPER_HOME=/usr/zookeeper/
export PATH=PATH:ZOOKEEPER_HOME/bin
重新编译文件:
source /etc/profile
少于三台不会正常工作的,可以通过命令查询状态:
zkCli.sh
三、安装kafka
主机列表为:192.168.2.70、192.168.2.71、192.168.2.72
下载安装
tar zxf kafka_2.12-2.0.0.tgz
mv kafka_2.12-2.0.0 /usr/local/kafka
修改配置文件
mkdir /usr/local/kafka/logs
vim /usr/local/kafka/config/server.properties
broker.id=0 #ID唯一,建议与zookeeper的myid对应
port=9092
listeners=PLAINTEXT://192.168.2.70:9092 #分别对应三台主机各自IP
num.network.threads=3 #borker进行网络处理的线程数
num.io.threads=8 #borker进行I/O处理的线程数
log.dirs=/usr/local/kafka/logs #消息存放目录,不是日志目录
num.partitions=3 #每个topic的默认分区数
log.retention.hours=72 #消息过期时间,默认为1周
default.replication.factor=1 #kafka保存消息的副本数
log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=kafka01:2181,kafka02:2181,kafka03:2181 #zookeeper主机名(ip)及端口
启动服务
启动kafka服务(依次启动3台主机)
bin/kafka-server-start.sh config/server.properties 1 > tmp/kafka.log 2>&1 &
jps 查看启动是否成功