storm读书笔记——storm运行流程

一、storm是一个用于实时流式计算的分布式计算引擎,弥补了Hadoop在实时计算方面的不足(Hadoop在本质上是一个批处理系统)。

二、storm在实际应用场景中的位置一般如下:

其中的编号1~5说明如下:

1、Flume用于收集日志信息;

2、结合数据传输功能可以把收集到的日志信息实时传输到kafka集群,或保存到Hadoop hdfs中保存。

这里之所以选择kafka集群是因为kafka集群具备缓冲功能,可以防止数据采集速度和数据处理速度不匹配导致数据丢失,这样做可以提高可靠性。

3、使用storm实时处理数据;

4、保存storm处理的结果数据,当数据量不是特别巨大时,可以使用MySQL存储;当数据量特别巨大时,可以选择hdfs存储。

5、用于实时展示处理结果。

三、storm的抽象运行方式:

其中:

spout为数据流的源头;

tuple为流动中的数据承载单元;

Bolt为数据流处理的中间状态。

四、spout和Bolt如何形成程序运行?

storm中运行的程序称为Topology,Topology将spout和bolt组装在一起,完成实时计算的任务。具体操作是通过TopologyBuilder的setSpout方法和setBolt方法,例子如下:

五、如何决定数据流的流向:

(1)借助在TopologyBuilder的setSpout方法和setBolt方法的第一个参数中为Spout程序和Bolt程序取的名字,例如上面示例代码中的“spout-name”以及“bolt-name-one”,“bolt-name-two”。

补充:setBolt方法原型:

setSpout方法原型:

(2)setBolt方法返回的BoltDeclarer对象利用fieldGrouping方法并结合(1)中的spout和bolt名字指定数据流的流向。

补充:fieldGrouping方法原型:

六、数据流中的数据承载单元tuple结构是什么

官网文档如下:

通俗的讲,tuple就是一个值列表,其中的值类型可以是任何类型,默认类型有byte,integer,short,long,float,double,string,byte[]。

tuple数据结构如下:

其中,fieldName是定义在declareOutputFields方法中的Fields对象,fieldValue值是在emit方法中发送的Values对象。

tuple都是通过spout和bolt发射(传送)的。

例如:

spout程序如下:

bolt程序如下:

七、spout如何发射无界的数据流,bolt如何处理接收到的数据tuple

(1)如在上一部分spout的示例代码,其中必含有nextTuple方法,在spout程序生命周期中,nextTuple方法一直运行,所以可以一直获取数据流中的数据并持续像bolt处理程序发射。

(2)如在上一部分bolt的示例代码,其中必含有execute方法,在bolt程序生命周期中,只要其收到tuple数据就会处理,根据需要会把处理后的数据继续发射出去。

八、如何保证所有发射的数据tuple都被正确处理

同一个tuple不管是处理成功还是失败,都由创建它的Spout发射并维护。

九、storm和Hadoop中各角色对比

十、storm比Hadoop实时是因为Hadoop在把一批数据都处理完毕后才输出处理结果,而storm是处理一点数据就实时输出这些数据的处理结果。

欢迎拍砖!留言您喜欢的技术类文章,或请前往51Testing软件测试网,您将收获更多IT技术知识~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228A0GKDU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券