flume 测试扩展性
flume的扩展性该如何测试?我没有想明白,如果有哪位高人知道请留言。
同事说就是测试其tps的性能。
案例:4台nginx服务器,每台节点起一个flume agent 监听其日志,随后发送第二层的flume。其中第一层的flume sink 使用sinkgroup做了balance。
我的理解是:第二层部署一个实例,和部署两个实例的对比情况就是测试其扩展性。但是通过监听每秒channel的经过的event数。其数值差距不大,且没有规律。
flume本身应该是串行的,首先sinkgroup就是单线程的,第一层不管接受到多少数据,到sink时都是顺序流过的,所有没有并行度可言。
问题:
tps这个指标是不是只适合测试并行执行的架构(mpp架构)。增加多个节点就能提高负载能力的系统?
以下代码是通过http协议监听flume中channel流经的events数量。
public class SingleMonitor {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
String channelName = args[args.length - 1];
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= args.length - 2; i++) {
sb.append(args[i]).append(",");
}
System.out.println("访问的uri地址为:[" + sb.toString() + "],channelName为:[" + channelName + "]");
String[] tmp_array = new String[args.length-1];
try {
while (true) {
for (int i = 0; i <= args.length - 2; i++) {
String url = args[i];
String responseStr = HttpClientUtil.sendHttpGet(url);
HashMap<String, HashMap<String, String>> obMap = (HashMap<String, HashMap<String, String>>) objectMapper.readValue(responseStr, Map.class);
tmp_array[i] = obMap.get(channelName).get("EventTakeSuccessCount");
}
System.out.println(System.currentTimeMillis() / 1000 + array2Str(tmp_array));
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static String array2Str(String[] tmpArray) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < tmpArray.length; i++) {
sb.append(",").append(tmpArray[i]);
}
return sb.toString();
}
}