Storm数据源和输出选择
一、数据源选择:
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。
相关文章
- flutter 日志输出,Flutter打印日志,flutter log,flutter 真机日志
- TIJ -- 任务间使用管道进行输入/输出
- C语言之基本算法38—格式化输出10000以内的全部完数
- 解决Python print输出不换行没空格的问题
- Google Earth Engine(GEE)——ui.Chart.image6种类型(时序图、直方图)的图形输出(宁夏为例)
- 用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?
- IDEA+循环语句 or 输出语句 快捷操作
- nginx日志输出,https,ssl
- 通过printf从目标板到调试器的输出
- C语言数据类型及输出——体重是否正常、球的体积、计算存银行利息and浮点数长度与精度
- 手把手教你搭建一个深度网络模型:从输入层-激活函数-损失函数-优化方法-输出层-执行训练
- matlab的输出流控制
- git diff与linux diff的输出格式之unified format
- curl输出字符JSON格式化:bash: python: 未找到命令