我想知道它们之间的区别,以及它们如何相互关联,以及"锚定元组"和"acker任务"的作用是什么.如果可能,请提供详细的说明和示例.我已经阅读了官方文档和一些相关文章,但我对这个主题的理解还不清楚.
Mat*_*Sax 10
StreamID:默认情况下,有一个(逻辑)流被调用default
.在一些用例中,有必要,没有单个(逻辑)流而是多个(每个流中具有不同的数据).为此,您可以声明其他流并为它们分配ID(即名称)以区分它们(这在declareOutputFields(...)
方法中完成).将拓扑"插入"时,默认情况下,始终分配给默认流(作为输入流),但您也可以指定要明确接收的流的名称.
TaskID.每个喷口/螺栓具有指定的平行度(即,平行度dop
).因此,每个Spout/Bolt在多个任务中执行,并且每个任务获得分配的ID以便可以区分它们.
MessageID:如果要使用容错机制,则需要为Spouts发出的每个元组分配唯一的ID.
Acker任务:用于处理ack
来自您的螺栓的消息(即,当您调用时由系统发送的消息collector.ack(...)
或collector.fail(...)
)以跟踪元组是否成功处理或失败.你通常不需要关心它们.
锚定:锚定是一种告诉Storm的机制,输入元组用于产生哪些输出元组.如果你有一个Bolt,它将一个句子分成单词并且每个单词发出一个元组,你可以将所有单词锚定到同一个句子.(如果单词元组失败,Storm知道它需要回复句子元组,以便可以恢复丢失的元组).另一方面,如果你聚合让我们说最后5个输入元组来计算平均值,你将缓冲所有5个输入元组,直到你发出平均元组并使用所有5个输入元组作为这个单个平均输出元组的锚点.(同样,如果输出元组丢失,Storm知道它需要回复所有5个输入元组,以便可以重新计算丢失的平均元组).请注意,您不能使用元组作为锚点,已经对Storm有所帮助.因此,您需要延迟对输入元组进行处理,直到它不再需要作为锚元组.
归档时间: |
|
查看次数: |
1615 次 |
最近记录: |