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()方法, 通常的处理手段是日志记录