- 【博学谷学习记录】超强总结,用心分享|Kafka的相关shell命令与基准测试
- 一、Kafka的相关shell命令
- 1.1 创建Topic:kafka-topics.sh --create
- 1.2 查看当前已经建立的Topic:kafka-topics.sh --list
- 1.3 查看某一个topic的详细信息:./kafka-topics.sh --describe
- 1.4 修改Topic:./kafka-topics.sh --alter
- 1.5 删除Topic:./kafka-topics.sh --delete
- 1.6 模拟生产者:./kafka-console-producer.sh --broker-list
- 1.7 模拟消费者:./kafka-console-consumer.sh --bootstrap-server
- 二、Kafka的基准测试
【博学谷学习记录】超强总结,用心分享|Kafka的相关shell命令与基准测试
一、Kafka的相关shell命令
1.1 创建Topic:kafka-topics.sh --create
./kafka-topics.sh --create --zookeeper node1:2181,node2:2181,node3:2181 --topic test01 --partitions 3 --replication-factor 2
参数介绍:
(1)执行操作: --create 表示为创建
(2)连接地址: zookeeper地址 --zookeeper node1:2181,node2:2181,node3:2181
(3)创建的topic的名字: --topic test01
(4)topic有多少个分片: --partitions 3
(5)每个分片有多少个副本: --replication-factor 2
1.2 查看当前已经建立的Topic:kafka-topics.sh --list
./kafka-topics.sh --list --zookeeper node1:2181,node2:2181,node3:2181
1.3 查看某一个topic的详细信息:./kafka-topics.sh --describe
查看每一个topic的详细信息:
./kafka-topics.sh --describe --zookeeper node1:2181,node2:2181,node3:2181
查看某一个topic的详细信息:
./kafka-topics.sh --describe --zookeeper node1:2181,node2:2181,node3:2181 --topic test01
1.4 修改Topic:./kafka-topics.sh --alter
Topic 仅允许增大分片, 不允许减少分片, 同时也不支持修改副本数量
增大分区:
./kafka-topics.sh --alter --zookeeper node1:2181,node2:2181,node3:2181 --topic test01 --partitions 5
1.5 删除Topic:./kafka-topics.sh --delete
./kafka-topics.sh --delete --zookeeper node1:2181,node2:2181,node3:2181 --topic test01
注意:
默认情况下, 删除一个topic 仅仅是标记删除, 主要原因: kafka担心误删数据, 一般需要用户手动删除
如果想执行删除的时候, 直接将topic完整的删除掉: 此时需要在server.properties 配置中修改一个配置为true
delete.topic.enable=true
如果topic中的数据量非常少, 或者说没有任何的数据的时候, 此时topic会自动先执行逻辑删除, 然后在物理删除, 不管是否配置了delete.topic.enable=true
1.6 模拟生产者:./kafka-console-producer.sh --broker-list
./kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test01
1.7 模拟消费者:./kafka-console-consumer.sh --bootstrap-server
./kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic test01
默认从当前时间开始消费数据, 如果想从头开始消费, 可以添加 --from-beginning 参数即可
二、Kafka的基准测试
kafka的基准测试:
主要指的安装完成Kafka集群后, 进行测试操作, 测试其是否承载多大的并发量(读写效率)
官方网站: https://www.kafka.apache.org
注意: 在进行Kafka的基准测试的时候, 受Topic的分片和副本的数量影响会比较大, 一般在测试的时候, 会构建多个topic, 每一个topic设置不同的分片和副本的数量, 比如: 一个设置分片多一些, 副本少一些, 一个设置分片少一些, 副本多一些, 要不设置分片多些副本也多些。
2.1 创建一个Topic
./kafka-topics.sh --create --zookeeper node1:2181,node2:2181,node3:2181 --topic test02 --partitions 6 --replication-factor 1
2.2 测试写入的数据的效率
./kafka-producer-perf-test.sh --topic test02 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1
属性说明:
--num-records: 发送的总消息量
--throughput: 指定吞吐量(限流) -1 不限制
--record-size: 每条数据的大小(字节)
--producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1 设置生产者的配置信息(连接地址, 消息确认方案)
写后的结果:
5000000 records sent, 134578.634296 records/sec (128.34 MB/sec), 239.83 ms avg latency, 1524.00 ms max latency, 45 ms 50th, 940 ms 95th, 1269 ms 99th, 1461 ms 99.9th.
需关注的信息:
5000000 records sent : 总计写入了多少条数据
134578.634296 records/sec: 每秒中可以处理多少条数据
128.34 MB/sec: 每秒钟可以处理的数据量是多大
2.3 测试读取数据的效率
./kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test02 --fetch-size 1048576 --messages 5000000
属性:
--fetch-size 1048576 : 每次从kafka端拉取的数据量
--messages: 测试的总消息量
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-03-30 21:08:26:464, 2023-03-30 21:08:42:373, 4768.3716, 299.7279, 5000000, 314287.5102, 1680181706706, -1680181690797, -0.0000, -0.0030
start.time: 2023-03-30 21:08:26:464 启动时间
end.time: 2023-03-30 21:08:42:373 结束时间
data.consumed.in.MB: 4768.3716 总大小
MB.sec: 299.7279 每秒中可以处理的大小
data.consumed.in.nMsg: 5000000 总消息量
nMsg.sec: 314287.5102 每秒钟可以处理的数据
2.4 Kafka基准测试总结
假设Kafka的节点数量是无限多的:
topic的分片数量越多, 理论上读写效率越高
topic的副本数量越多, 理论上写入的效率越差
一般可以将分片的数量设置为节点数量的三倍左右, 副本数量为1, 基本上可以测试出最佳性能。