StormApplied读书笔记(三) - 18965050/storm-applied GitHub Wiki
Topology设计的5个步骤
- 定义问题, 形成一个概念上的解决方案
- 映射成storm解决方案
- 实现Topology中的每个部分
- 组装Topology
- 调优观察并改进
可靠性
Storm 可靠性表现在如下四个方面:
- 可靠的数据源及相应可靠的Spout
- 稳定(anchored)的tuple流. 这里指的是tuple tree
- tuple成功响应或失败通知的Topology
- 容错的cluster机制
tuple tree: storm会对spout产生的tuple以及此tuple经过bolt处理过程,在内部生产tuple tree
storm spout可靠性保证: BaseRichSpout
storm bolt可靠性保证有两种方式:
- 隐式方式(implicit): 通过BaseBasicBolt来实现. BaseBasicBolt在emit tuple的时候, 自动将此tuple关联到来源(income)tuple, 当execute()方法执行成功后, 自动给来源tuple发ack信息. 如果执行失败, 只需要抛出FailException异常, 此异常自动关联来源tuple
- 显式方式(explicit): 通过BaseRichBolt来实现. 在emit tuple时, 需要显式指定来源tuple.
outputCollector.emit(new Values(order))
||
\/
outputCollector.emit(tuple, new Values(order))
execute方法执行成功后, 需调用
outputCollector.ack(tuple)
执行失败时,
throw new FailedException()
||
\/
outputCollector.fail(tuple)
Error
storm error可分为两种:
- 可重试(retriable): 比如socket连接异常等等
- 不可重试(nonretriable): 比如ParseException, 这类错误不需要再execute()方法中抛出FailException或调用fail()方法, 通常的处理手段是日志记录