rdkafka性能测试小结

来源:互联网 发布:关于数据新闻的选题 编辑:程序博客网 时间:2024/05/17 22:22

先说一下坑的领悟,我相信使用任何一个开源工具,这都是最基本的。

一、观察目录的结构,是否有readme,是否有makefile文件,仔细阅读,尝试make,再阅读源码,其实开源的很多东西,人家自带的文件都写的很清楚,避免再跳进坑里。

二、如果API遇到问题,想想是不是还有什么参数没有写,命令行中提示必须写的参数,API都配置了吗?(例如生产者的broker-list,topic等)

运行rdkafka的客户端环境需求

1.   The GNU toolchain

2.   GNU make

3.   pthreads

4.   zlib (optional, for gzip compression support)

5.   libssl-dev (optional, for SSL support)

6.   libsasl2-dev (optional, for SASL support)

7.   liblz4-dev (optional, for LZ4 compression support)

生成rdkafka的链接库

1)   Cd rdkafka 

2)   ./configure

3)   make

4)   sudo make install

默认在usr/local/lib下生成动态链接库和静态链接库

在usr/local/include下生成头文件

API示例

Example和test文件夹

观察example文件夹下有makefile文件,因此make(自动编译,链接了rdkafka库)之后,生成可执行文件,而且提示如何运行。

备注: 

1.   C API src/rdkafka.h

2.   C++ APIsrc-cpp/rdkafkacpp.h

3.   生成API:make docs

4.   默认的配置文件: CONFIGURATION.md

5.   librdkafka简介: INTRODUCTION.md

6.  示例应用程序需要链接rdkafka库 -lrdkafka-lz -lpthread -lrt

备注:拷走example文件至另一台服务器上可行???必须有librdkafka的库环境,不然example下make会提示找不到库。Example执行文件依赖kafka的API,即rdkafka库和src下很多的头文件。因此自带rdkafka的动态链接库和相关头文件就可以移植到其他服务器上,如果还是出现找不到库的情况,编辑etc目录下的ld配置文件,将库的路径加入ld配置文件。

 

于是可以直接用example中的performance执行程序进行性能测试

测试环境:

一个broker,一个topic:test1,一个分区,一个副本

一个分区有一个leader broker,客户端只和leader broker进行交互,非leader broker只是做高可用。

bin/kafka-topics.sh--create --zookeeper localhost:2181 --replication-factor 1 --partitions 1--topic test

Test1:

1)    生产者与消费者都在broker

2)    Produce required.acks=1,0,-1

0:发送完毕,直接返回

1:等分区的leader写完毕,返回

-1:等分区的所有副本同步完毕,返回

3)    100 byte 400万条 消息

总的消息量381MB,统计生产时间,消费时间

Command:

生产者

a)  命令
./rdkafka_performance -P -t test1  -s 100 -c 4000000 -b localhost:9092–m "_____________Test1:OneBrokers:4000000msgs:100bytes" -S 1 -a 0
输出结果
% 4000000 messages produced (400000000 bytes), 4000000 delivered (offset 0, 0 failed) in 17667ms: 226401 msgs/s and 22.64 Mb/s, 880 produce failures, 0 in queue, no compression
c)  命令:
./rdkafka_performance -P -t test1  -s 100 -c 4000000 -b localhost:9092-m "_____________Test1:OneBrokers:4000000msgs:100bytes" -S 1 -a 1
输出结果
% 4000000 messages produced (400000000 bytes), 4000000 delivered (offset 0, 0 failed) in 17851ms: 224075 msgs/s and 22.41 Mb/s, 693 produce failures, 0 in queue, no compression
e)   命令:
./rdkafka_performance -P -t test1  -s 100 -c 4000000 -b localhost:9092 -m "_____________Test1:OneBrokers:4000000msgs:100bytes" -S 1 -a 0 -z snappy
输出结果
% 299 backpressures for 4000000 produce calls: 0.007% backpressure rate
% 4000000 messages produced (400000000 bytes), 4000000 delivered (offset 0, 0 failed) in 17456ms: 229141 msgs/s and 22.91 Mb/s, 299 produce failures, 0 in queue, snappy compression
消费者
a)  
./rdkafka_performance -C -t test1 -p 0 -b localhost:9092 -c 4000000 -B 1 -o beginning
输出结果:
此处省略% 4000000 messages (399999621 bytes) consumed in 32432ms: 123333 msgs/s (12.33 Mb/s)
% Average application fetch latency: 8us
结果说明:一条条的取消息,去381MB数据,大概需要30s,吞吐量是12MB/s
c)   命令
./rdkafka_performance -C -t test1 -p 0 -b localhost:9092 -c 4000000 -B 20 -o beginning
输出结果:
% 4000000 messages (399999621 bytes) consumed in 32114ms: 124555 msgs/s (12.46 Mb/s)
% Average application fetch latency: 8us
结果表明:设置成批量为20后,消费速度提高了一点点
e)   ./rdkafka_performance -C -t test1 -p 0 -b localhost:9092 -c 4000000 -B 2000 -o beginning
% 4000000 messages (399999621 bytes) consumed in 32038ms: 124850 msgs/s (12.49 Mb/s)
% Average application fetch latency: 8us
结果表明:消费速度提高了一点点
f)   ./rdkafka_performance -C -t test1 -p 0 -b localhost:9092 -c 4000000 -B 200000 -o beginning
结果说明,最大可以达到22.87Mb/s,但是不稳定。
g)   ./rdkafka_performance -C -t test1 -p 0 -b localhost:9092 -B 2000 -o beginning
./rdkafka_performance -P -t test1  -s 100 -c 1000000000 -b localhost:9092 -m "_____________Test1:OneBrokers:4000000msgs:100bytes" -S 1 -a 1 
结论:消费者一直运行,从头获取消息,生产者生产消息,消费者速度12Mb/s,生产速度23Mb/s
 

 

0 0
原创粉丝点击