kafka集群搭建
第一步部署三个节点zk
3.1. 下载Zookeeper
下载地址:http://mirror.bit.edu.cn/apache/zookeeper/
解压文件:
#tar -zxvf zookeeper-3.4.11.tar.gz
3.2. 配置相关文件
1) 配置conf/zoo.cfg
将zk安装目录下conf/zoo_sample.cfg修改为zoo.cfg
#cp zoo_sample.cfg zoo.cfg
文件内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/mnt/hadoop/zookeeper-3.4.12/data
clientPort=2181
server.1=192.168.3.172:2888:3888
server.2=192.168.3.173:2888:3888
server.3=192.168.3.174:2888:3888
initLimit
ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。
syncLimit
配置follower和leader之间发送消息,请求和应答的最大时间长度。
tickTime
tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
server.id=host:port1:port2
其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
dataDir
其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。myid文件的内容只有一行,且内容只能为1 - 255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。
2) 设置myid
在节点配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置的server.X,则myid文件中就输入这个数字X。(即在每个节点上新建并设置文件myid,其内容与zoo.cfg中的id相对应)这里master节点为 1
#mkdir /mnt/hadoop/zookeeper-3.4.12/data
#cd /mnt/hadoop/zookeeper-3.4.12/data
#touch myid
#echo “1” > myid
3) 设置日志
修改conf/log4j.properties
Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE
改为
Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, ROLLINGFILE
将
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
改为—每天一个log日志文件,而不是在同一个log文件中递增日志log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
修改bin/zkEvn.sh
54 if [ "x${ZOO_LOG_DIR}" = "x" ]
55 then
56 ZOO_LOG_DIR="."
57 fi
58
59 if [ "x${ZOO_LOG4J_PROP}" = "x" ]
60 then
61 ZOO_LOG4J_PROP="INFO,CONSOLE"
62 fi
改为
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="$ZOOBINDIR/../logs"
Fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
3.3. 从master节点分发文件到其他节点
1) ZK软件从主节点复制到其它节点
把在hdn1上配置好的zk软件,通过远程复制命令
scp -r /mnt/hadoop/zookeeper-3.4.12 hadoop@hdn2:/mnt/hadoop/
#scp -r /mnt/hadoop/zookeeper-3.4.12 hadoop@hdn3:/mnt/hadoop/
复制到hdn2、hdn3对应的位置 并修改myid.
在hdn2节点的/mnt/hadoop/zookeeper-3.4.12/data目录下
#vi /mnt/hadoop/zookeeper-3.4.12/data/myid
修改为 2
在hdn3节点的/mnt/hadoop/zookeeper-3.4.12/data目录下
#vi /mnt/hadoop/zookeeper-3.4.12/data/myid
修改为 3
3.4. 启动ZK
在每个节点上$ZOOKEEPER_HOME目录下,运行 (这里的启动顺序为 hdn1> hdn2 > hdn2 )
/mnt/hadoop/zookeeper-3.4.12/bin/zkServer.sh start
都运行后,再用命令在各节点查看启动状态
/mnt/hadoop/zookeeper-3.4.12/bin/zkServer.sh status
如果启动失败,可以到zk安装目录logs目录下查看日志。
3.5. 关闭ZK
#/mnt/hadoop/zookeeper-3.4.12/bin/zkServer.sh stop
登录zk
/mnt/hadoop_runtimes/zookeeper-3.4.12/bin/zkCli.sh
=============================================================
第二步部署三个节点kafka
修改配置文件 server.properties
1.broker.id=2 #每个节点的值不一样,必须为正整数
2.log.dirs=/mnt/kafka/kafka_2.11-2.1.0/logs
3.#设置zookeeper的连接端口
zookeeper.connect=192.168.3.227:2181,192.168.3.228:2181,192.168.3.229:2181
出现问题解决方案:
- Error while fetching metadata with correlation id : {LEADER_NOT_AVAILABLE}
表示无法识别kafka hostname
kafka配置文件:
listeners=PLAINTEXT://192.168.3.228:9092
advertised.listeners=PLAINTEXT://192.168.3.228:9092
每个节点分别启动:
nohup /mnt/kafka_2.11-2.1.0/bin/kafka-server-start.sh /mnt/kafka_2.11-2.1.0/config/server.properties &
/mnt/kafka_2.11-2.1.0/bin/kafka-server-start.sh -daemon config/server.properties
jps查看kafka进程
=============================================================
测试kafka
- 创建 wfdebugo01,这个topic分区数为3,复制为1(不复制)。该topic跨越全部broker。下面管理命令在任意kafka节点上执行即可
/mnt/kafka_2.11-2.1.0/bin/kafka-topics.sh --create --zookeeper node3,node4,node5 --replication-factor 1 --partitions 3 --topic wfdebugo01
- 创建 wfdebugo02,这个topic分区数为1,复制为3(每个主机都有一份)。该topic跨越全部broker。下面管理命令在任意kafka节点上执行即可
/mnt/kafka_2.11-2.1.0/bin/kafka-topics.sh --create --zookeeper node3,node4,node5 --replication-factor 3 --partitions 1 --topic wfdebugo02
- 列出topic信息
/mnt/kafka_2.11-2.1.0/bin/kafka-topics.sh --list --zookeeper localhost:2181
- 列出topic描述信息
/mnt/kafka_2.11-2.1.0/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic wfdebugo01
- 消息的产生和消费
/mnt/kafka_2.11-2.1.0/bin/kafka-console-producer.sh --broker-list node3:9092 --topic wfdebugo01
/mnt/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server node3:9092 --topic wfdebugo01 --from-beginning