1.一种面向实时流计算的无感知拓扑替换方法,其特征在于:包括以下步骤:步骤(1)初始化一个头尾相连的环形队列ringBuffer,其长度设置为length;
步骤(2)获取当前时间窗口内拓扑中数据计算失败的数量failNum;
步骤(3)遍历ringBuffer队列,对于ringBuffer中的每一个元素ringBuffer(i),E(M)=E(M)+ringBuffer(i);其中E(M)初始值为0,代表ringBuffer所有时间窗口内数据计算失败数量的均值;
步骤(4)E(M)=E(M)/A;其中A指的是当前ringBuffer中有效的TW个数;
2 2
步骤(5)遍历ringBuffer队列,对于ringBuffer中的每一个元素ringBuffer(i),S=S+(ringBuffer(k)-E(M))2*Wt(i),其中S2为加权离散率,Wt(i)为系统预设的时间窗口权值,取值为[0.5,1];
步骤(6)S2=S2/A;
2
步骤(7)判断S值是否大于C,若是则进行步骤(8),否则结束,无需进行拓扑替换,C为系统预设的离散率阈值;
步骤(8)判断failNum是否大于E(M),若大于则进行步骤(9),否则进行步骤(10);
步骤(9)对当前的拓扑进行扩容替换,其过程如下:
9.1)获取当前拓扑的并发度currentParallelism;
9.2)在实时计算系统中复制一个当前拓扑的副本newTopology,将其并发度设置为currentParallelism*2,进行步骤(11);
步骤(10)对当前拓扑进行缩容替换,其过程如下:
10.1)获取当前拓扑的并发度currentParallelism;
10.2)实时计算系统中复制一个当前拓扑的副本newTopology,将其并发度设置为currentParallelism/2,进行步骤(11);
步骤(11)对当前Topology中的Task索引进行重新计算;
步骤(12)初始化newTopology,按照索引分配Task所在的Worker Node,等待原Topology数据处理完成之后再开始执行,此时新到达的数据会流入newTopology;
所述步骤(1)中,所述环形队列ringBuffer是一个循环使用的无限队列,ringBuffer中的每一个元素是一个时间窗口TW,时间窗口的长度记为TWL,TW数据收集完成指的是该时间窗口成功收集到时间窗口长度内数据计算失败的数量,数据收集完成的TW也称为有效TW,由此得出ringBuffer记录的时间窗口的长度为length*TWL,ringBuffer会随时间变化无限地向后推移,它记录的时间区间是[当前时间-length*TWL,当前时间]。