一、数据源选择:
1、实时性
我们已经不断的提到Storm是一个实时计算框架。其不能一次性获取所有的数据,进行分析处理。而是Spout不断的从外部数据源中获取最新的数据,然后交给Bolt处理。这意味着,我们的Spout必须要不断的检测外部数据源有没有最新的数据,如果有新数据了,就获取到最新的数据,然后交给Bolt处理。
2、容错
而且我们还必须要考虑的是,如果如果一条数据处理失败了,Spout必须还能再次获取这条数据,否则计算出的结果的误差就会比较大。
3、数据路由
我们已经知道一个Topology中可能会有多个Spout来从外部数据源中获取数据,假设我们有SPOUTA、SPOUTB、SPOUTC,那么某些业务场景下,我们可能希望同一条数据,SPOUTA、SPOUTB、SPOUTC都能获取到。在另外一些业务场景下,可能只希望SPOUTA获取到这条数据。如果数据源不支持路由,意味着,对于不同Topology,我们能需要开发不同的数据获取机制。这无疑增大我们的开发量。
...
从以上简单的几个要求,我们可以发现,现有的JMS消息机制,刚好满足这个条件。主流的消息中间件,如Kafka、RocketMq等。
因此,Storm的最佳数据源,实际上就是消息中间件。在本教程中,我们将使用阿里的RocketMq作为数据源进行讲解。不过,在刚开始时,我们会使用模拟的外部数据源,来帮忙我们理解Topology的工作流程。等到熟悉之后,再使用RocketMq作为外部数据源。
二、数据输出目的地的选择:
由于Storm本身是一个实时计算的框架,本身没有提供存储服务,大部分情况下,我们需要将计算出的结果存储到持久化设备中。
我们可以考虑Mysql、Hbase等任意可以持久存储数据工具。当然,根据实际情况,如果Storm输出的数据量比较大的话,我们还是会考虑Hbase,如果量比较小的话,我们可以使用Mysql。