storm入门知识点有哪些

62次阅读
没有评论

共计 2847 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要介绍“storm 入门知识点有哪些”,在日常操作中,相信很多人在 storm 入门知识点有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”storm 入门知识点有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

1.1  实时流计算

互联网从诞生的第一时间起,对世界的最大的改变就是让信息能够实时交互,从而大大加速了各个环节的效率。正因为大家对信息实时响应、实时交互的需求,软件行业除了个人操作系统之外,数据库(更精确的说是关系型数据库)应该是软件行业发展最快、收益最为丰厚的产品了。记得十年前,很多银行别说实时转账,连实时查询都做不到,但是数据库和高速网络改变了这个情况。

随着互联网的更进一步发展,从 Portal 信息浏览型到 Search 信息搜索型到 SNS 关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对效率的要求让大家对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理加 NoSQL 产品应运而生,分别解决实时框架和数据大规模存储计算的问题。

早在 7、8 年前诸如 UC 伯克利、斯坦福等大学就开始了对流式数据处理的研究,但是由于更多的关注于金融行业的业务场景或者互联网流量监控的业务场景,以及当时互联网数据场景的限制,造成了研究多是基于对传统数据库处理的流式化,对流式框架本身的研究偏少。目前这样的研究逐渐没有了声音,工业界更多的精力转向了实时数据库。

2010 年 Yahoo!对 S4 的开源,2011 年 twitter 对 Storm 的开源,改变了这个情况。以前互联网的开发人员在做一个实时应用的时候,除了要关注应用逻辑计算处理本身,还要为了数据的实时流转、交互、分布大伤脑筋。但是现在情况却大为不同,以 Storm 为例,开发人员可以快速的搭建一套健壮、易用的实时流处理框架,配合 SQL 产品或者 NoSQL 产品或者 MapReduce 计算平台,就可以低成本的做出很多以前很难想象的实时产品:比如一淘数据部的量子恒道品牌旗下的多个产品就是构建在实时流处理平台上的。

本教程是一本对 storm 的基础介绍手册,但是我们也希望它不仅仅是一本 storm 的使用手册,我们会在其中加入更多我们在实际数据生产过程的经验和应用的架构,最后的目的是帮助所有愿意使用实时流处理框架的技术同仁,同时也默默的改变这个世界。

1.2  Storm 特点

Storm 是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。Storm 有很多使用场景:如实时分析,在线机器学习,持续计算,分布式 RPC,ETL 等等。Storm 支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个结点每秒可以处理数以百万计的消息)。Storm 的部署和运维都很便捷,而且更为重要的是可以使用任意编程语言来开发应用。

Storm 有如下特点:

编程模型简单

在大数据处理方面相信大家对 hadoop 已经耳熟能详,基于 Google Map/Reduce 来实现的 Hadoop 为开发者提供了 map、reduce 原语,使并行批处理程序变得非常地简单和优美。同样,Storm 也为大数据的实时计算提供了一些简单优美的原语,这大大降低了开发并行实时处理的任务的复杂性,帮助你快速、高效的开发应用。

可扩展

在 Storm 集群中真正运行 topology 的主要有三个实体:工作进程、线程和任务。Storm 集群中的每台机器上都可以运行多个工作进程,每个工作进程又可创建多个线程,每个线程可以执行多个任务,任务是真正进行数据处理的实体,我们开发的 spout、bolt 就是作为一个或者多个任务的方式执行的。

因此,计算任务在多个线程、进程和服务器之间并行进行,支持灵活的水平扩展。

高可靠性

Storm 可以保证 spout 发出的每条消息都能被“完全处理”,这也是直接区别于其他实时系统的地方,如 S4。

请注意,spout 发出的消息后续可能会触发产生成千上万条消息,可以形象的理解为一棵消息树,其中 spout 发出的消息为树根,Storm 会跟踪这棵消息树的处理情况,只有当这棵消息树中的所有消息都被处理了,Storm 才会认为 spout 发出的这个消息已经被“完全处理”。如果这棵消息树中的任何一个消息处理失败了,或者整棵消息树在限定的时间内没有“完全处理”,那么 spout 发出的消息就会重发。

考虑到尽可能减少对内存的消耗,Storm 并不会跟踪消息树中的每个消息,而是采用了一些特殊的策略,它把消息树当作一个整体来跟踪,对消息树中所有消息的唯一 id 进行异或计算,通过是否为零来判定 spout 发出的消息是否被“完全处理”,这极大的节约了内存和简化了判定逻辑,后面会对这种机制进行详细介绍。

这种模式,每发送一个消息,都会同步发送一个 ack/fail,对于网络的带宽会有一定的消耗,如果对于可靠性要求不高,可通过使用不同的 emit 接口关闭该模式。

上面所说的,Storm 保证了每个消息至少被处理一次,但是对于有些计算场合,会严格要求每个消息只被处理一次,幸而 Storm 的 0.7.0 引入了事务性拓扑,解决了这个问题,后面会有详述。

  高容错性

如果在消息处理过程中出了一些异常,Storm 会重新安排这个出问题的处理单元。Storm 保证一个处理单元永远运行(除非你显式杀掉这个处理单元)。

当然,如果处理单元中存储了中间状态,那么当处理单元重新被 Storm 启动的时候,需要应用自己处理中间状态的恢复。

支持多种编程语言

除了用 java 实现 spout 和 bolt,你还可以使用任何你熟悉的编程语言来完成这项工作,这一切得益于 Storm 所谓的多语言协议。多语言协议是 Storm 内部的一种特殊协议,允许 spout 或者 bolt 使用标准输入和标准输出来进行消息传递,传递的消息为单行文本或者是 json 编码的多行。

Storm 支持多语言编程主要是通过 ShellBolt, ShellSpout 和 ShellProcess 这些类来实现的,这些类都实现了 IBolt 和 ISpout 接口,以及让 shell 通过 java 的 ProcessBuilder 类来执行脚本或者程序的协议。

可以看到,采用这种方式,每个 tuple 在处理的时候都需要进行 json 的编解码,因此在吞吐量上会有较大影响。

支持本地模式

Storm 有一种“本地模式”,也就是在进程中模拟一个 Storm 集群的所有功能,以本地模式运行 topology 跟在集群上运行 topology 类似,这对于我们开发和测试来说非常有用。

高效

用 ZeroMQ 作为底层消息队列, 保证消息能快速被处理

到此,关于“storm 入门知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2847字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)