Kafka安装部署
1.zookeeper安装部署
zookeeper使用的版本为3.5.5
http://zookeeper.apache.org/releases.html
下载文件时注意:下载bin.tar.gz
文件
1.1踩坑
踩坑:第一次下载成了tar.gz包,启动不成功,各种百度排错。
查看日志报错:错误: 找不到或无法加载主类org.apache.zookeeper.server.quorum.QuorumPeerMain
问题解决方案:转载(https://blog.youkuaiyun.com/jiangxiulilinux/article/details/96433560)
1.2安装部署
(1)解压安装包
wget http://apache.stu.edu.tw/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz -C /usr/software/
(2)创建软链接
cd /usr/software/
ln -s apache-zookeeper-3.5.5-bin/ zookeeper
(3)复制配置文件
cd /usr/software/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
(4)修改配置文件
(5)新建数据存放目录
mkdir -p /usr/data/zookeeper
1.3操作zookeeper
cd /usr/software/zookeeper
# 启动zk
./bin/zkServer.sh start
# 查看状态
./bin/zkServer.sh status
# 重启zk
./bin/zkServer.sh restart
# 停止zk
./bin/zkServer.sh stop
2.kafka安装部署
kafka使用版本2.12-2.3.0
http://kafka.apache.org/downloads
2.1安装部署
(1)解压
wget http://apache.stu.edu.tw/kafka/2.3.0/kafka_2.12-2.3.0.tgz
tar -zxvf kafka_2.12-2.3.0.tgz -C /usr/software/
cd /usr/software/
# 创建软链接
ln -s kafka_2.12-2.3.0.tgz kafka
(2)修改配置文件
在 kafka 安装目录下有一个 config/server.properties 文件,修改该文件。
(2)kafka启动与停止
# 启动zk
cd /usr/software/zookeeper/bin
./zkServer.sh start
# 启动kafka
# 在命令后添加-daemon 参数,可以使 kafka 以守护进程方式启动,即不占用窗口。
cd /usr/software/kafka
./bin/kafka-server-start.sh -daemon config/server.properties
# 停止kafka
cd /usr/software/kafka
./bin/kafka-server-stop.sh
2.2kafka操作
(1)创建topic
./bin/kafka-topics.sh --create --bootstrap-server 192.168.73.201:9092 --replication-factor 1 --partitions 1 --topic test
(2)查看topic
./bin/kafka-topics.sh --list --bootstrap-server 192.168.73.201:9092
(3)发送消息
./bin/kafka-console-producer.sh --broker-list 192.168.73.201 --topic test
(4)消费消息
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.73.201:9092 --topic test --from-beginning
(5)删除topic
./bin/kafka-topics.sh --delete --bootstrap-server 192.168.73.201:9092 --topic test
3.简单集群搭建
以 第一台kafka为母机再克隆两台 Kafka 主机。在克隆完毕后,需要修改 server.properties中的 broker.id、 listeners 与 advertised.listeners。
kafka2
kafka3
完成之后我的集群环境是
- zookeeper:192.168.73.200:2181
- kafka1:192.168.73.201:9092
- kafka2:192.168.73.202:9092
- kafka3:192.168.73.203:9092
4.日志查看
这里说的日志不是 Kafka的启动日志,启动日志在 Kafka安装目录下的logs/server.log
中。
消息在磁盘上都是以日志的形式保存的,日志是存放在/tmp/kafka_logs
目录中的消息日志,即 partition 与 segment。我的日志文件路径是/usr/data/kafka_logs
4.1查看分区与备份
(1)1个分区1个备份
创建一个主题,命名为 test,创建一个分区,一个备份。
/usr/software/kafka/bin/kafka-topics.sh --create --bootstrap-server 192.168.73.201:9092 --replication-factor 1 --partitions 1 --topic test
cd /usr/data/kafka_logs
(2)3个分区一个备份
创建一个主题,命名为 one,创建三个分区,但仍为一个备份。 依次查看三台broker,可以看到每台 broker 中都有一个 one主题的分区。
/usr/software/kafka/bin/kafka-topics.sh --create --bootstrap-server 192.168.73.201:9092 --replication-factor 1 --partitions 3 --topic one
kafka1
kafka2
kafka3
(3)3个分区3个备份
创建一个主题,命名为two,创建三个分区,三个备份。 依次查看三台broker,可以看到每台 broker 中都有三份two主题的分区。
/usr/software/kafka/bin/kafka-topics.sh --create --bootstrap-server 192.168.73.201:9092 --replication-factor 3 --partitions 3 --topic two
kafka1
kafka2
kafka3
4.2查看段segment
(1)segment文件
segment 是一个逻辑概念,其由两类物理文件组成,分别为.index
文件和.log
文件。.log
文件中存放的是消息,而.index
文件中存放的是.log
文件中消息的索引。
如何进行消息查找:
若kafka中有5000条消息,每1000条存储在一个文件中;这样分段文件名称为
00000000000000000000.log和00000000000000000000.index;第二段的文件名就是00000000000000001000.log和00000000000000001000.index。
查找第1006条消息
- 通过二分法先确定到00000000000000001000.log和00000000000000001000.index文件
- 1006-1000=6,通过二分法在index文件中找到小于等于6的位置
- 通过index中的值,从log文件顺序查找到对应位置的消息
(2)查看segemnt
对于 segment 中的 log 文件,不能直接通过cat命令查看其内容,而是需要通过 kafka自带的一个工具查看。
/usr/software/kafka/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files /usr/data/kafka-logs/test-0/00000000000000000000.log --print-data-log