最近在研究分布式消息中间件kafka,写个随笔记录下集群搭建的步骤和遇到的一些问题
第一步、搭建Zookeeper集群
Kafka是使用Zookeeper来保存集群元数据信息和消费者信息。虽然Kafka发行版已经自带了Zookeeper,可以通过脚本直接启动,但仍然建议安装一个完整版的Zookeeper。
1、下载zookeeper
cd opt
wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxvf zookeeper-3.4.14.tar.gz
2、修改配置文件
cd /zookeeper-3.4.14
mkdir logs
cd conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改配置文件zoo.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/opt/zookeeper-3.4.14/data
dataLogDir=/root/opt/zookeeper-3.4.14/logs
# 从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能
# 这个参数指定了需要保留的文件数目。默认是保留3个。
autopurge.snapRetainCount=500
# 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
autopurge.purgeInterval=24
clientPort=2181
server.1=192.168.1:2888:3888
server.2=192.168.2:2888:3888
server.3=192.168.3:2888:3888
依次按照上述步骤搭建3台服务器server1、server2、server3
3、创建myid文件
cd /root/opt/zookeeper-3.4.14/data
#server1
echo "1" > myid
#server2
echo "2" > myid
#server3
echo "3" > myid
4、修改日志配置文件
conf目录的log4j.properties是zk的日志输出的配置文件
conf/log4j.properties
将:
zookeeper.root.logger=INFO, CONSOLE
改为:
zookeeper.root.logger=INFO, ROLLINGFILE
将:
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
改为:
// 每天一个log日志文件,而不是在同一个log文件中递增日志
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
bin/zkEvn.sh
将:
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="."
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
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
5、启动zk集群
依次启动server1、server2、server3上zk
cd bin
// 启动
./zkServer.sh start
// 查看启动状态
./zkServer.sh status
注意:一定要先把防火墙关了!否则节点之前互相连接不上
第二步、搭建Kafka集群
1、下载Kafka
cd opt
wget http://mirror.bit.edu.cn/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz
tar -zxvf kafka_2.12-2.2.0.tgz
cd kafka_2.12-2.2.0
2、修改配置文件
Kafka的配置文件在${KAFKA_HOME}/config/server.properties目录:
mkdir logs
cd config
vim server.properties
添加如下配置:
# 当前broker在集群中的唯一标识,类似zk中的myid
broker.id=1
# 配置监听
listeners=PLAINTEXT://192.168.1:9092
# 消息日志输出目录
log.dirs=/root/opt/kafka_2.12-2.2.0/logs
# 使用的zk集群
zookeeper.connect=192.168.1,192.168.2,192.168.3:2281/kafka
依次按照上述步骤搭建3台服务器server1、server2、server3
3、启动Kafka集群
依次启动server1、server2、server3上Kafka
cd bin
./kafka-server-start.sh -daemon ../config/server.properties
ok,至此Kafka集群已搭建成功
4、创建Topic来验证集群是否工作正常
cd bin
// 创建topic
./kafka-topics.sh --create --bootstrap-server 192.168.1:9092 --replication-factor 1 --partitions 1 --topic test
// 查看topic列表
./kafka-topics.sh --list --bootstrap-server 192.168.1:9092
// 查看topic描述
./kafka-topics.sh --describe --bootstrap-server 192.168.1:9092 --topic test
// 删除topic
./kafka-topics.sh --bootstrap-server 192.168.1:9092 --delete --topic test
// 创建生产者发送消息
./kafka-console-producer.sh --broker-list 192.168.1:9092 --topic test
This is a message
This is another message
// 创建消费者接收消息
./kafka-console-consumer.sh --bootstrap-server 192.168.1:9092 --topic test --from-beginning
This is a message
This is another message
// 查看topic策略
./kafka-configs.sh --zookeeper 192.168.1:2181/kafka --describe --entity-type topics --entity-name test
// 修改topic数据保留时间为10分组(不用重启kakfa)
./kafka-configs.sh --zookeeper 192.168.1:2181/kafka --entity-type topics --entity-name test --alter --add-config retention.ms=600000
大功告成,Kafka集群搭建完毕