一、测试环境
OpenTSDB单节点部署,底层HBase存储为7节点集群。每个节点由XenServer虚拟,虚拟的硬件配置相同。
单节点内存:16GB
单节点CPU:双核 Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz (x86_64)
HBase部署:RegionServer为5节点,2个HMaster节点(其中一个备用)。
HBase RegionServer最大JVM内存配置:4G
二、测试过程及结果记录
1、测试单线程写入OpenTSDB速度,使用HTTP API请求。
样本数据:1-20设备ID(共20设备),每个设备500测点(K1-K350,T1-T150),源数据格式(每个条目,相当于MySQL中的一行数据)为<time,id,K1..K350,T1..T150>,每个字段都是String编码格式,其中Kn属于开关量,取值{0,1},Tn属于Double量。数据每秒产生一次,共产生12小时数据 (43200条)。一次HTTP写请求可以携带多个数据条目。HTTP写请求每批次(每次HTTP POST长度)数据体长度(字节,不是条目数)控制在8k(范围[8110, 8209])以下。HTTP写请求的数据体为JSON格式。
测试结果:十条(一条一个设备,共十个设备,所有设备各有500测点)数据批量写入约为900ms。
2、测试多线程写入一批数据到OpenTSDB耗时,使用HTTP API请求。
样本数据:同上,因数据每秒每台设备产生一条,积攒10s后一次性处理写入。产生10秒数据(共 5000条)。使用多线程(10线程,可配)并发写入,每线程处理50台设备。
时间戳截取:从开始启动截取一次,每个现成处理完最后一条数据各截取自己的时间戳,在这个过程中每个线程将写入5000/线程数条数据到OpenTSDB。
测试结果:不同线程数并行处理耗时,单位毫秒(millisecond)。
线程数 | 开始时间戳 | 时间戳范围 | 时间间隔范围 |
10 | 1489729025703 | [1489729053443,1489729053986] | [27740, 28283] |
20 | 1489730351485 | [1489730376983,1489730379312] | [25498, 27827] |
测试5秒产生的数据写入耗时(线程数10)。
数据量 | 开始时间戳 | 时间戳范围 | 时间间隔范围 |
5秒 | 1489731656466 | [1489731670147,1489731671317] | [13681, 14851] |
三、结论
简单分析多线程环境下测试数据,10线程与20线程下10秒钟数据量的写入时间没有太大差别,20线程稍快。得出以下结论:
1. 10线程
平均写入速度为0.112ms/点,单线程平均每秒写入8928.57点。10线程总吞吐量为平均每秒89285.7点。
2. 20线程
平均写入速度为0.2133ms/点,单线程平均每秒写入4688.23点。20线程总吞吐量为平均每秒93764.6点。