kafka
1. 集群安装
需要事先安装好zookeeper。
1.1 jar包下载
http://kafka.apache.org/downloads.html
1.2 安装
- 解压缩安装包
[lhcz@host-192-168-240-116 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
- 修改解压后的文件名称
[lhcz@host-192-168-240-116 module]$ mv kafka_2.11-0.11.0.0/ kafka
- 在/opt/module/kafka目录下创建logs文件夹
[lhcz@host-192-168-240-116 kafka]$ mkdir logs
- 修改配置文件
[lhcz@host-192-168-240-116 kafka]$ vim config/server.properties 修改为以下内容: #broker的全局唯一编号,不能重复 broker.id=0 #删除topic功能使能 delete.topic.enable=true #处理网络请求的线程数量 num.network.threads=3 #用来处理磁盘IO的现成数量 num.io.threads=8 #发送套接字的缓冲区大小 socket.send.buffer.bytes=102400 #接收套接字的缓冲区大小 socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小 socket.request.max.bytes=104857600 #kafka运行日志存放的路径 log.dirs=/opt/module/kafka/logs #topic在当前broker上的分区个数 num.partitions=1 #用来恢复和清理data下数据的线程数量 num.recovery.threads.per.data.dir=1 #segment文件保留的最长时间,超时将被删除 log.retention.hours=168 #配置连接Zookeeper集群地址 zookeeper.connect=hadoop116:2181,hadoop117:2181,hadoop118:2181
- 配置环境变量
[lhcz@host-192-168-240-116 kafka]$ sudo vim /etc/profile.d/env.sh 添加以下内容: #KAFKA_HOME export KAFKA_HOME=/opt/module/kafka export PATH=$PATH:$KAFKA_HOME/bin 使环境生效 [lhcz@host-192-168-240-116 kafka]$ source /etc/profile.d/env.sh
- 分发安装包
[lhcz@host-192-168-240-116 module]$ xsync kafka
注意:分发之后记得配置其他机器的环境变量
- 分别在hadoop117和hadoop118上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2
注:broker.id不得重复
1.3 Kafka集群启动停止脚本
- 在/home/lhcz/bin目录下创建脚本kf.sh
vim kf.sh 内容如下: #! /bin/bash case $1 in "start"){ for i in hadoop116 hadoop117 hadoop118 do echo " --------启动 $i Kafka-------" ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties " done };; "stop"){ for i in hadoop116 hadoop117 hadoop118 do echo " --------停止 $i Kafka-------" ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop" done };; esac 添加执行权限 chmod 777 kf.sh
- 启动脚本
kf.sh start
- 停止脚本
kf.sh stop
2. kafka命令行操作
2.1 查看Kafka Topic列表
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181 --list
2.2 创建Kafka Topic
进入到/opt/module/kafka/目录下分别创建:启动日志主题、事件日志主题。
- 创建启动日志主题
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181,hadoop117:2181,hadoop118:2181 --create --replication-factor 1 --partitions 1 --topic topic_start
2.3 删除topic
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --delete --zookeeper hadoop116:2181,hadoop117:2181,hadoop118:2181 --topic topic_start
2.4 Kafka生产消息
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-console-producer.sh \
--broker-list hadoop116:9092 --topic topic_start
>hello world
>atguigu atguigu
2.5 Kafka消费消息
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-console-consumer.sh \
--zookeeper hadoop116:2181 --from-beginning --topic topic_start
2.6 查看某个Topic的详情
[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181 \
--describe --topic topic_start
3. kafka项目经验
3.1 Kafka压力测试
-
Kafka压测
用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。
kafka-consumer-perf-test.sh
kafka-producer-perf-test.sh -
Kafka Producer压力测试
在/opt/module/kafka/bin目录下。bin/kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput 1000 --producer-props bootstrap.servers=hadoop116:9092,hadoop117:9092,hadoop118:9092
输出内容如下:
5002 records sent, 1000.2 records/sec (0.10 MB/sec), 4.8 ms avg latency, 390.0 max latency. 5020 records sent, 1004.0 records/sec (0.10 MB/sec), 0.5 ms avg latency, 20.0 max latency. 5001 records sent, 1000.0 records/sec (0.10 MB/sec), 0.4 ms avg latency, 6.0 max latency. 5002 records sent, 1000.4 records/sec (0.10 MB/sec), 0.3 ms avg latency, 8.0 max latency.
参数解析:本例中一共写入10w条消息,每秒向Kafka写入了0.10MB的数据,平均是1000条消息/秒,每次写入的平均延迟为0.5毫秒,最大的延迟为390毫秒。
-
Kafka Consumer压力测试
bin/kafka-consumer-perf-test.sh --zookeeper hadoop116:2181 --topic test --fetch-size 10000 --messages 10000000 --threads 1
参数说明:
–zookeeper 指定zookeeper的链接信息
–topic 指定topic的名称
–fetch-size 指定每次fetch的数据的大小
–messages 总共要消费的消息个数
结果如下:start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec 2020-07-22 18:17:25:838, 2020-07-22 18:17:27:032, 7.8770, 6.5971, 82596, 69175.8794
开始测试时间,测试结束数据,最大吞吐率7.8770MB/s,平均每秒消费6.5971MB/s,最大每秒消费82596条,平均每秒消费69175.8794条。
3.2 Kafka机器数量计算
Kafka机器数量(经验公式)=2*(峰值生产速度*副本数/100)+1
先要预估一天大概产生多少数据,然后用Kafka自带的生产压测(只测试Kafka的写入速度,保证数据不积压),计算出峰值生产速度。再根据设定的副本数,就能预估出需要部署Kafka的数量。
比如我们采用压力测试测出写入的速度是10M/s一台,峰值的业务数据的速度是50M/s。
副本数为2。 Kafka机器数量=2*(50*2/100)+ 1=3台