- 安装前准备
- 集群搭建
- 集群启动
- 集群操作
- Kafka 基准测试
环境准备
云服务器 3 台(Centos 7)
安装包下载
Apache Kafka 2.12-2.4.1
# 版本号说明 scala 版本号 - kafka 版本号,即 scala 的版本号为 2.12 ,kafka 的版本号为 2.4.1
服务器域名映射
# 3 台服务器都执行 # 1. 编辑 hosts 文件 vim /etc/hosts # 2. 增加以下内容 172.17.0.8 node1 172.17.20.14 node2 172.17.30.12 node3
zookeeper 环境准备
zookeeper 集群搭建
在 3 台服务器上搭建好 zookeeper 集群并启动
集群搭建上传安装包并解压
# 3 台服务器都操作 cd /opt/server/ tar -xvzf kafka_2.12-2.4.1.tgz -C /opt/server/
修改配置文件
# 3 台服务器都操作 cd /opt/server/kafka_2.12-2.4.1/config # 1.编辑 vim server.properties # 2.增加以下内容 # 指定 broker 的 id,注意:第 2 台 和 第 3 台服务器的值分别为 2 和 3 (仅此处不同) broker.id=1 # 指定Kafka数据的位置 log.dirs=/opt/server/kafka_2.12-2.4.1/data # 配置zk的三个节点 zookeeper.connect=node1:2181,node2:2181,node3:2181
配置环境变量
vim /etc/profile
# 增加以下内容
export KAFKA_HOME=/opt/server/kafka_2.12-2.4.1
export PATH=:$PATH:${KAFKA_HOME}
# 刷新配置
source /etc/profile
集群启动
启动
cd /opt/server/kafka_2.12-2.4.1 # 后台启动 nohup bin/kafka-server-start.sh config/server.properties &集群操作
查看 topic 列表
bin/kafka-topics.sh --bootstrap-server node1:9092 --list
创建 topic
# 创建一个名称为 test 的 topic bin/kafka-topics.sh --create --bootstrap-server node1:9092 --topic test
删除 topic
bin/kafka-topics.sh --delete --bootstrap-server node1:9092 --topic test
生产者生产消息
执行后,可以多次输入,每次回车,代表生产一条消息,Ctrl + C 则结束
# 生产一个消息到名称为 test 的 topic 中 # Kafka 内置的测试程序 bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
消费者消费消息
执行后,等待生产者生产消息,生产者每生产一条则显示一条,Ctrl + C 则结束
# 从名称为 test 的 topic 中消费一个消息 # Kafka 内置的测试程序 bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginningKafka 基准测试
基准测试(benchmark testing)说明
基准是一种测量和评估软件性能指标的活动。我们可以通过基准测试,了解到软件、硬件的性能水平。主要测试负载的执行时间、传输速度、吞吐量、资源占用率等
# 生产者参数说明 --topic topic的名字 --num-records 总共指定生产数据量(默认5000W) --throughput 指定吞吐量——限流(-1不指定) --record-size record数据大小(字节) --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1 指定Kafka集群地址,ACK模式 # 消费者参数说明 --broker-list 指定kafka集群地址 --topic 指定topic的名称 --fetch-size 每次拉取的数据大小 --messages 总共要消费的消息个数
基准测试总结
① 生产者
| 指标 | 1分区1副本 | 1分区3副本 | 3分区1副本 |
|---|---|---|---|
| 吞吐量 | 3.03w records/s | 2.84w records/s | 3.58 w records/s |
| 吞吐速率 | 28.93 MB/s | 27.04 MB/s | 34.17 MB/s |
② 消费者
| 指标 | 1分区1副本 | 1分区3副本 | 3分区1副本 |
|---|---|---|---|
| 每秒消费的数据量 | 32.20 MB/s | 28.59 MB/s | 37.94 MB/s |
| 每秒消费的条数 | 3.38 w 条/s | 3.00w 条/s | 3.98w 条/s |
分区相同,副本不同:生产者随着副本增多吞吐量降低;消费者随着副本增多消费速度降低 (副本尽量少)
副本相同,分区不同:生产者随着分区增多吞吐量提高;消费者随着分区增多消费速度提高 (分区尽量多)
基准测试(1个分区1个副本)
① 启动 Kafka 集群
② 创建一个1个分区1个副本的 topic: benchmark
bin/kafka-topics.sh --zookeeper node1:2181 --create --topic benchmark --partitions 1 --replication-factor 1
③ 同时运行生产者、消费者基准测试程序(测试50W的消息)
# 运行生产者 bin/kafka-producer-perf-test.sh --topic benchmark --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1 # 运行消费者 bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 500000
④ 测试结果
基准测试(3个分区1个副本)
① 启动 Kafka 集群
② 创建一个3个分区1个副本的 topic: benchmark
bin/kafka-topics.sh --zookeeper node1:2181 --create --topic benchmark --partitions 3 --replication-factor 1
③ 同时运行生产者、消费者基准测试程序(测试500W的消息)
# 运行生产者 bin/kafka-producer-perf-test.sh --topic benchmark --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1 # 运行消费者 bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 500000
④ 测试结果
基准测试(1个分区3个副本)
① 启动 Kafka 集群
② 创建一个1个分区3个副本的 topic: benchmark
bin/kafka-topics.sh --zookeeper node1:2181 --create --topic benchmark --partitions 1 --replication-factor 3
③ 同时运行生产者、消费者基准测试程序(测试500W的消息)
# 运行生产者 bin/kafka-producer-perf-test.sh --topic benchmark --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1 # 运行消费者 bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 500000
④ 测试结果



