kafka 0.9.0.1 安装配置及简单压测

kafka 0.9.0.1 安装配置及简单压测

1. 简介

Kafka专为分布式高吞吐量系统而设计。 作为一个更传统的消息代理的替代品。 与其他消息传递系统相比,Kafka具有更好的吞吐量,内置分区,复制和固有的容错能力,这使得它非常适合大规模消息处理应用程序。

在实际使用中,kafka的不同版本协议也不完全一致,不是向下兼容的,使用时需特别注意,我这里使用的是0.9.0.1的版本。

2. 服务器配置

本次安装的服务器为物理机3台:
CPU:双Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz
内存:128G配置
10块SAS HDD 1T盘做raid10,挂载到/data1。

主机名 IP 备注
sh-saas-k8s-kafka-online-01 10.16.252.33 zookeeper,kafka
sh-saas-k8s-kafka-online-02 10.16.252.39 zookeeper,kafka
sh-saas-k8s-kafka-online-03 10.16.252.40 zookeeper,kafka

2. kafka安装及配置

kafka需要用到zookeeper,所以我们需要先安装zookeeper。kafka及zookeeper都需要是JAVA语言开发,需要使用JDK,推荐1.8版本。

2.1 ZooKeeper安装和配置

下载zookeeper安装:

zookeeper使用的配置文件为zoo.cfg,上面我们已经从zoo_sample.cfg复制了一份配置文件,现在修改它:
vim zoo.cfg

创建zookeeper需要使用的目录:
mkdir -p /data1/appdata/zk /data/log/zk

#生成myid,下面的ID要与配置文件内的server.x的ID x一致:
echo "1">/data1/appdata/zk/myid

启动zookeeper:
sh bin/zkServer.sh start

日志在logs目录下,有问题可以先看日志。

在其它2台服务器上,使用上面同样的方法安装后,整个zookeeper集群就安装和配置好了。

可以用下面的命令测试是否可用:
sh bin/zkCli.sh -server 10.16.252.40:2181

2.2 kafka安装和配置

下载安装:

配置kafka:

server.properties配置文件:

创建存储目录:
mkdir -p /data1/appdata/kafka

配置JVM内存:

启动:
sh bin/kafka-server-start.sh -daemon config/server.properties

停止:
sh bin/kafka-server-stop.sh

其它2台机器也与同样的方法安装及配置后,就完成集群的安装了。

3. kafka压测

kafka自带了一个压测工具,在bin目录下,叫:kafka-producer-perf-test.sh。
在压测之前,先把压测脚本的JVM内存配置调大一点,默认为512M
vim bin/kafka-producer-perf-test.sh

使用示例:
sh bin/kafka-producer-perf-test.sh --topic test_perf2 --num-records 1000000000 --record-size 1000 --throughput 2000000 --producer-props bootstrap.servers=10.16.252.33:9092,10.16.252.39:9092,10.16.252.40:9092
相关参数:
–topic topic名称,本例为test_perf2
–num-records 总共需要发送的消息数,本例为1000000000
–record-size 每个记录的字节数,本例为1000
–throughput 每秒钟发送的记录数,本例为2000000
–producer-props bootstrap.servers=10.16.252.33:9092,10.16.252.39:9092,10.16.252.40:9092 kafka的配置信息

现在开始压测:

topic分区数 kafka配置参数 record-size 测试客户端数 测试结果
3 num.network.threads=16,num.io.threads=32 1000 1 24万
3 num.network.threads=16,num.io.threads=32 1000 2 28万
3 num.network.threads=16,num.io.threads=32 1000 3 36万
6 num.network.threads=16,num.io.threads=32 1000 1 24万
6 num.network.threads=16,num.io.threads=32 1000 2 38万
6 num.network.threads=16,num.io.threads=32 1000 3 45万
6 num.network.threads=16,num.io.threads=32 500 1 50万
6 num.network.threads=16,num.io.threads=32 500 2 80万
6 num.network.threads=16,num.io.threads=32 500 3 90万
12 num.network.threads=16,num.io.threads=32 1000 1 24万
12 num.network.threads=16,num.io.threads=32 1000 2 39万
12 num.network.threads=16,num.io.threads=32 1000 3 46万
12 num.network.threads=6,num.io.threads=8 1000 1 24万
12 num.network.threads=6,num.io.threads=8 1000 2 39万
12 num.network.threads=6,num.io.threads=8 1000 3 46万

总的来说,只有topic的分区能平均落到每台服务器上,不同参数对性能影响不大,除了分片数,这说明对kafka影响最大的是IO,网络IO及磁盘IO。记录的大小与性能成反比。
下面是其中一台的监控数据,另外说明一下,压测客户端也运行在这些服务器上。

今天换了一组服务器,同样是3台:
CPU:Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
内存:256G (每台只跑了一个实例,没有意义,只用了32G)
磁盘:12块ssd硬盘做raid10

测试结果:

topic分区数 kafka配置参数 record-size 测试客户端数 测试结果
12 num.network.threads=16,num.io.threads=32 1000 1 53万
12 num.network.threads=16,num.io.threads=32 1000 2 85万
12 num.network.threads=16,num.io.threads=32 1000 3 120万
12 num.network.threads=16,num.io.threads=32 2000 1 30万
12 num.network.threads=16,num.io.threads=32 2000 2 50万
12 num.network.threads=16,num.io.threads=32 2000 3 64万

可以看到还是SSD硬盘强悍,性能直接翻了一倍多。

另外也大致测试了一台服务器的IOPS:
读35k iops:

写25k iops:

但是压测时,kafka基本只能用于12K左右的iops:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

2 × 3 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据