我有一个storm topology,spout S0发送tuple到bolt B1,B1对接收的tuple进行实际的计算处理。bolt处理的速度跟不上spout发送数据的速度,解决方法之一当然是增加bolt,但当前的主要需求不是为了让bolt跟上spout的发送速度,而是能够自定义从spout接收来的tuple的处理顺序。方法之一,我在中间增加了一个bolt B0,用作缓冲区:[spout S0] --tuples--> [buffer bolt B0] --tuples--> [processing bolt B1] -->...缓冲bolt B0存在的唯一理由,是为了能够在接收到spout发来的tuple后,用我们自定义的规则,插入到一个ArrayList中,在后续的bolt B1处理完毕后,从ArrayList表头emit发送一个tuple给后续的bolt B1处理,从而达到自定义处理顺序的目的。(或者也可以收到tuple后加入队尾,但emit时根据自定的策略选择一个tuple去发送)。这个思路的问题在于:bolt只能够重写execute函数,它是在收到一个tuple后被执行的,此时我的确可以用自定义的策略去插入到arraylist,但bolt没法使用类似于spout的nextTuple函数——我希望的是bolt一边接收、一边发送,而不是每次接收时去选择发送或不发送。另外一个思路,"Understanding the Internal Message Buffers of Storm"这篇文章提供了很多有用的信息,如果我能够修改storm中worker receive thread的buffer部分的代码,也许也能够实现自定义buffer收/发tuple的策略。但是我找不到storm中负责worker接收线程里buffer的类是哪个。请教各位storm大神如何实现一个能够同时接收和发送tuple、并能够自定义收发tuple策略的bolt,或者:负责apache storm中worker receive thread里buffer的类是哪个,亦或者有其他的解决途径?