Kafka集群搭建及性能测试分析

  • 准备环境

准备3台虚拟机机器,一样系统(cent os7),安装同样的jdk, Zookeeeper;关闭防火前;SSH无密登录配置好。 

   kafka集群部署

名称

角色

地址

编号(myid)

hadoop130

节点

192.168.64.130

1

hadoop131

节点

192.168.64.131

2

hadoop132

节点

192.168.64.132

3

   准备kafka压缩包

   kafka_2.13-3.5.1.tgz

  • 解压配置
  1. 解压

tar -zxvf kafka_2.13-3.5.1.tgz

  1. 移动

mv kafka_2.13-3.5.1 /opt/module

  1. 修改配置文件server.properties

vi server.properties

# 指定broker的id

broker.id=0

# 指定Kafka数据的位置

log.dirs=/opt/module/kafka_2.13-3.5.1/data

# 配置zk的三个节点

zookeeper.connect=hadoop130:2181,hadoop131:2181,hadoop132:2181

  1. 配置kafka 环境

vi /etc/profile

增加

#kafka path

export KAFKA_HOME=/opt/module/kafka_2.13-3.5.1

export PATH=:$PATH:$KAFKA_HOME/bin

使子生效

source /etc/profile

  1. 把配置好的kafka拷贝到另外机器上

scp  -r kafka_2.13-3.5.1 hadoop131:/opt/module

scp  -r kafka_2.13-3.5.1 hadoop132:/opt/module

分别修改配置文件中broker.id的值为1和2

  • 运行

编写一键启停kafka集群文件kafkaCluster.sh

#!/bin/sh

case $1 in

"start"){

for host in hadoop130 hadoop131 hadoop132

do

  ssh $host "source /etc/profile; nohup ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties > /dev/null 2>&1 &" 

  echo "$host kafka is running..."

  sleep 1.5s

done 

};;

"stop"){

for host in hadoop130 hadoop131 hadoop132

do

  ssh $host "source /etc/profile; nohup ${KAFKA_HOME}/bin/kafka-server-stop.sh > /dev/null  2>&1 &"  

  echo "$host kafka is stopping..." 

  sleep 1.5s

done

};;

esac

启动:

kafkaCluster.sh start

停止:

kafkaCluster.sh stop

  • 参数说明

# 指定broker的id

broker.id=0

# 配置zk的三个节点

zookeeper.connect=hadoop130:2181,hadoop131:2181,hadoop132:2181

# 指定Kafka数据的位置

log.dirs=/opt/module/kafka_2.13-3.5.1/data

#为了实现内外网访问,我们定义两种访问服务INTERNAL(内网),EXTERNAL(外网)。内外网配置的协议都是PLAINTEXT。这样就可以实现区分内外网ip访问kafka服务。

listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

listeners=INTERNAL://hadoop130:9092,EXTERNAL://hadoop130:19092

#指定broker间使用的协议为

inter.broker.listener.name=INTERNAL

  • 测试

5.1简单命令测试

创建topic
kafka-topics.sh --create --topic test001 --bootstrap-server hadoop130:9092


查看所有topic
 kafka-topics.sh --list --bootstrap-server localhost:9092

# 查看当前kafka集群中的topic
kafka-topics.sh --bootstrap-server hadoop130:9092,hadoop131:9092.hadoop132:9092 --list


生产者

kafka-console-producer.sh --broker-list hadoop130:9092 --topic haha

消费者 [--property print.key]显示key [--from-beginning]从开始位置消费
kafka-console-consumer.sh --bootstrap-server PLAINTEXT://localhost:9092 --topic haha --from-beginning

标记删除 删除主题
kafka-topics.sh --delete --topic test001 --bootstrap-server hadoop130:9092

kafka-topics.sh --delete --topic test --bootstrap-server hadoop130:9092

# 创建名为test的主题 1个分区,一个副本

kafka-topics.sh --create --bootstrap-server hadoop130:9092 --topic test --partitions 1 --replication-factor 1

生产一些消息到Kafka的test主题中

kafka-console-producer.sh --broker-list hadoop130:9092 --topic test

消费 test 主题中的消息

kafka-console-consumer.sh --bootstrap-server hadoop130:9092 --topic test --from-beginning

查询 Topic 的详细信息

kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092

说明:如果未指定 topic 则输出所有 topic 的信息

5.2基于1个分区1个副本的基准测试

1》创建topic

 kafka-topics.sh --create --bootstrap-server hadoop130:9092 --topic benchmark --partitions 1 --replication-factor 1

2》生产消息基准测试

使用5000万条数据

kafka-producer-perf-test.sh

--topic topic的名字

--num-records         总共指定生产数据量(默认5000W)

--throughput  指定吞吐量——限流(-1不指定)

--record-size   record数据大小(字节)

--producer-props

bootstrap.servers=server1:9092,server2:9092,server3:9092 acks=1 指定Kafka集群地址,ACK模式

执行:

kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=hadoop130:9092,hadoop131:9092,hadoop132:9092 acks=1

结果:

5000000 records sent, 31177.123474 records/sec (29.73 MB/sec), 1042.11 ms avg latency, 1588.00 ms max latency, 1018 ms 50th, 1239 ms 95th, 1367 ms 99th, 1566 ms 99.9th.

总记录数

5000000

吞吐量

31177.123474 records/sec

3.1万条/秒

吞吐速率

29.73 MB/sec

平局延迟时间

1042.11 ms

最大延迟时间

1588.00 ms

3》消费消息基准测试

kafka-consumer-perf-test.sh

--broker-list 指定kafka集群地址

--topic 指定topic的名称

--fetch-size 每次拉取的数据大小

--messages 总共要消费的消息个数

执行:

 kafka-consumer-perf-test.sh --broker-list hadoop130:9092,hadoop131:9092,hadoop132:9092 --topic benchmark --fetch-size 1048576 --messages 5000000

结果:

start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec

2023-07-28 09:52:34:274, 2023-07-28 09:53:29:822, 4768.7149, 85.8485, 5000360, 90018.7225, 684, 54864, 86.9188, 91141.0032

data.consumed.in.MB共计消费的数据

4768.7149MB

MB.sec每秒消费的数据

85.8485   每秒85MB

data.consumed.in.nMsg共计消费的数量

5000360

nMsg.sec每秒的数量

90018.7225   每秒9万条

5.3基于3个分区1个副本的基准测试

1》创建topic

kafka-topics.sh --create --bootstrap-server hadoop130:9092 --topic benchmark2 --partitions 3 --replication-factor 1

  2》生产消息基准测试

   执行:

 kafka-producer-perf-test.sh --topic benchmark2 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=hadoop130:9092,hadoop131:9092,hadoop132:9092 acks=1

   结果:

5000000 records sent, 76849.774062 records/sec (73.29 MB/sec), 406.48 ms avg latency, 2454.00 ms max latency, 313 ms 50th, 1008 ms 95th, 1597 ms 99th, 2412 ms 99.9th.

总记录数

5000000

吞吐量

76849.774062 records/sec

7.6万条/秒

吞吐速率

73.29 MB/sec

平局延迟时间

406.48 ms

最大延迟时间

2454.00

  3》消费消息基准测试

执行:

  kafka-consumer-perf-test.sh --broker-list hadoop130:9092,hadoop131:9092,hadoop132:9092 --topic benchmark2 --fetch-size 1048576 --messages 5000000

   结果:

2023-07-28 11:25:08:577, 2023-07-28 11:25:32:203, 4768.3716, 201.8273, 5000000, 211631.2537, 576, 23050, 206.8708, 216919.7397

data.consumed.in.MB共计消费的数据

4768.3716MB

MB.sec每秒消费的数据

201.8273   每秒201MB

data.consumed.in.nMsg共计消费的数量

5000000

nMsg.sec每秒的数量

211631.2537  每秒21万条

5.4基于1个分区3个副本的基准测试

kafka-topics.sh --create --bootstrap-server hadoop130:9092 --topic benchmark3 --partitions 1 --replication-factor 3

kafka-producer-perf-test.sh --topic benchmark3 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=hadoop130:9092,hadoop131:9092,hadoop132:9092 acks=1

5000000 records sent, 21923.382164 records/sec (20.91 MB/sec), 1466.92 ms avg latency, 10952.00 ms max latency, 1135 ms 50th, 3516 ms 95th, 6992 ms 99th, 10550 ms 99.9th.

kafka-consumer-perf-test.sh --broker-list hadoop130:9092,hadoop131:9092,hadoop132:9092 --topic benchmark3 --fetch-size 1048576 --messages 5000000

2023-07-28 11:50:32:722, 2023-07-28 11:51:42:537, 4768.3716, 68.3001, 5000000, 71617.8472, 760, 69055, 69.0518, 72406.0531

  • 总结

同样环境分区副本不同测试比较

生产  总记录数5000000

项目

1分区1副本

3分区1副本

1分区3副本

吞吐量

31177.123474 records/sec

3.1万条/秒

76849.774062 records/sec

7.6万条/秒

21923.382164 records/sec

2.1万条/秒

吞吐速率

29.73 MB/sec

73.29 MB/sec

20.91 MB/sec

平局延迟时间

1042.11 ms

406.48 ms

1466.92 ms

最大延迟时间

1588.00 ms

2454.00

10952.00 ms

结论

分区多 吞吐量大 ;副本多 吞吐量小。

消费 总记录数5000000

项目

1分区1副本

3分区1副本

1分区3副本

data.consumed.in.MB共计消费的数据

4768.7149MB

4768.3716MB

4768.3716MB

MB.sec每秒消费的数据

85.8485

每秒85MB

201.8273

每秒201MB

68.3001

每秒68MB

data.consumed.in.nMsg共计消费的数量

5000360

5000000

5000000

nMsg.sec每秒的数量

90018.7225

每秒9万条

211631.2537

每秒21万条

71617.8472

每秒7.1万条

结论

分区多 每秒消费量大;

副本多 每秒消费量小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值