storm高可靠性:
storm有一种机制可以保证从spout发出的每个tuple都会被完全处理
可靠性机制:
1.节点故障迁移
当一个节点上的worker出现问题是,会自动切到其他节点;
2.消息完整发送
- 一个消息(tuple)从spout发送出来,可能会导致成百上千的消息基于此消息被创建
- “单词统计”的例子:
- storm任务从数据源每次读取一个完整的英文句子;将这个句子分解为独立的单词,最后,实时的输出每个单词以及它出现过的次数。
- 每个从spout发送出来的消息(每个英文句子)都会触发很多的消息被创建,那些从句子中分隔出来的单词就是被创建出来的新消息。
- 这些消息构成一个树状结构,我们称之为“tuple tree”
在什么条件下,Storm才会认为一个从spout发送出来的消息被完整处理呢?
- tuple tree不再生长
- 树中的任何消息被标识为“已处理”
可靠性总结:
- 无论何时在tuple tree中创建了一个新的节点,我们需要明确的通知Storm;
- 当处理完一个单独的消息时,我们需要告诉Storm 这棵tuple tree的变化状态。
- 通过上面的两步,storm就可以检测到一个tuple tree何时被完全处理了,并且会调用相关的ack或fail方法。
- 锚定(anchoring)