1.一种面向实时流计算的并行数据回流方法,其特征在于:所述回流方法包括以下步骤:步骤(1)初始化三个队列,分别为Eden队列、From队列和To队列,它们分别由三个指针EdenP、FromP和ToP来标识;若Topology需要从外部数据源获取数据,则外部数据源的数据会先存入Eden队列;
步骤(2)初始化一个管道Data Queue,Data Queue负责从Eden队列、From队列和To队列中读取数据到Topology中,Data Queue通过指针(EdenP、FromP、ToP)来选择读取的队列;
步骤(3)Topology的Spout向Data Queue发起读请求;
步骤(4)Data Queue读取三个队列中的数据,供Spout使用;
步骤(5)判断ToP指向的队列是否为空,若是,进行步骤(6);若否,进行步骤(7);
步骤(6)将From队列中的数据复制到To队列中,并清空From队列;
步骤(7)Topology获取Data Queue中的数据,当前Task向下游发送一个Tuple;
步骤(8)当前Task等待发送Tuple的反馈,若发送失败或超时未反馈,则选择回流该Tuple,最长等待时间不超过TTL,TTL是Task之间消息传递的最长往返时间;
步骤(9)判断Topology是否可以停止,若否,则回到步骤(4),否则,结束。
2.如权利要求1所述的一种面向实时流计算的并行数据回流方法,其特征在于:所述步骤(4)中,Data Queue读取三个队列中的数据的过程如下:
4.1)判断ToP指向的队列是否为空,若非空,进行步骤4.2,否则进行步骤4.3;
4.2)读取ToP指向的队列中的数据,进行步骤(5);
4.3)读取EdenP指向的队列。
3.如权利要求1或2所述的一种面向实时流计算的并行数据回流方法,其特征在于:所述步骤(6)中,将From队列中的数据复制到To队列中并清空From队列的过程如下:
6.1)设置空队列指针Change,Change赋值为ToP;
6.2)将ToP赋值为FromP;
6.3)将FromP赋值为Change。
4.如权利要求1或2所述的一种面向实时流计算的并行数据回流方法,其特征在于:所述步骤(8)的过程如下:
8.1)在TTL时间内,下游Task是否确认收到该消息,若是则进行步骤8.2),否则进行步骤8.3;
8.2)当前Tuple已处理成功,进行步骤(9);
8.3)当前Tuple处理失败,将该Tuple写回FromP指向的队列,进行步骤(9)。
5.如权利要求1或2所述的一种面向实时流计算的并行数据回流方法,其特征在于:所述步骤(6)中,效果等同于From队列与To队列互换,该步骤由一个单独的线程Copy-thread负责执行,ToP指向的队列与Eden队列和From队列相比会被Data Queue优先读取。
6.如权利要求1或2所述的一种面向实时流计算的并行数据回流方法,其特征在于:所述步骤(8)中,在Topology中计算失败的数据被写回到FromP指向的队列,该步骤由一个单独的线程Backflow-thread负责执行;虽然Task等待发送出的Tuple反馈,但此处Tuple是无状态的,Task仅仅确认数据是否发送到下游Task,而不会对数据的处理过程进行跟踪。