Storm分布式实时流计算框架相关技术总结

2019-03-02 23:45|来源: 网路

Storm作为一个开源的分布式实时流计算框架,其内部实现使用了一些常用的技术,这里是对这些技术及其在Storm中作用的概括介绍。以此为基础,后续再深入了解Storm的内部实现细节。

1. Zookeeper集群
Zookeeper是一个针对大型分布式系统的可靠协调服务系统,其采用类似Unix文件系统树形层次结构的数据模型(如:/zoo/a,/zoo/b),节点内可存储少量数据(<1M,当节点存储大数据量时,实际应用中可能出现同步问题)。

Zookeepr的高可靠性服务是通过配置Zookeeper集群实现的,官方建议Zookeeper集群至少包含3个节点,每个节点上存储一份数据,主节点挂掉后可以重新选取一个节点作为主节点。只要保证集群内有一半以上的节点存活,集群就可对外提供服务。

Zookeeper支持的操作类型有:
(1)创建树节点znode;
(2)删除树节点znode;
(3)读取树节点znode的内容和其子节点的内容;
(4)当节点内容发生变化或子节点增删时触发消息通知更新消息;
(5)支持瞬时节点(EPHEMERAL),创建节点的进程退出后节点自动被删除。

Storm中使用Zookeeper主要用于Storm集群各节点的分布式协调工作,具体功能如下:
(1)存储客户端提供的topology任务信息(即storm实时流程序),nimbus负责将任务分配信息写入Zookeeper,supervisor从Zookeeper上读取任务分配信息;
(2)存储supervisor和worker的心跳(包括它们的状态),使得nimbus可以监控整个集群的状态, 从而重启一些挂掉的worker;
(3)存储整个集群的所有状态信息和配置信息。

2. Thrift服务框架
Thrift是一个跨语言的可扩展的服务框架,它通过一个中间语言(IDL,接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成RPC客户端和服务器通信的无缝跨编程语言。

Storm中Thrift的应用场景:
(1)客户端向nimbus提交topology任务;
(2)supervisor从nimbus下载topology任务(代码和序列化文件);
(3)storm ui从nimbus获取topology运行的统计信息。

3. ZeroMQ消息队列
ZeroMQ是一个基于消息的嵌入式网络编程库,可作为并发框架连接多个应用程序,支持N-to-N的连接,多种工作模式(Request-reply,Publish-subscribe,Pipeline等),支持多种语言,ZeroMQ使得编写高性能网络应用程序极为简单。

Storm中ZeroMQ的应用场景:Spout与Bolt、Bolt与Bolt之间tuple消息的传输。

4. Java序列化
Java序列化技术可以实现将Java对象保存为二进制文件,而反序列化过程则可以在另一个Java进程中将此二进制文件恢复为Java对象,其缺点在于不能很好的解决版本变化。

Storm中Java序列化的应用场景:
(1)客户端提交topology任务后,Storm将topology任务序列化并发送给nimbus;
(2)supervisor从Zookeeper取得任务信息后,从nimbus下载序列化文件和jar包,启动worker进程并反序列化得到提交任务时的topology对象。

5. 总结
以上只是对Storm中所使用到的Zookeeper集群、Thrift服务框架、ZeroMQ消息队列、Java序列化技术及其在Storm中的应用情况的简单介绍,后续再进一步结合Storm的源码进行深入分析。以上内容,如果不对之处,欢迎大家指正。


转自:http://www.cnblogs.com/linjiqin/archive/2013/05/29/3105333

相关问答

更多
  • 建议你找卓新思创的老师交流一下,技术方面还是有人带着学得快。我们公司最近也在推新技术学习,刚开始大家自己看教程,折腾了半年也没有成效。
  • (1) 用什么语言都不能证明逼格,包括汇编,也包括lisp/haskell。 (2) 在适当的场合用适当的工具,解除耦合、减少重复、易于扩展才是对逼格的更高挑战。 比如有一组件对数据库有大量操作,我同事认为他要用C++模板元编程加上一些巧妙的设计模式来生成sql是逼格高的体现,我认为在这样的场景下至少要用上orm才能谈得上对逼格有要求。
  • 在我看来,一个完整的大数据平台应该提供离线计算、即席查询、实时计算、实时查询这几个方面的功能。 hadoop、spark、storm 无论哪一个,单独不可能完成上面的所有功能。 hadoop+spark+hive是一个很不错的选择.hadoop的HDFS毋庸置疑是分布式文件系统的解决方案,解决存储问题;hadoop mapreduce、hive、spark application、sparkSQL解决的是离线计算和即席查询的问题;spark streaming解决的是实时计算问题;另外,还需要HBase或者 ...
  • 一、DFS为何物? DFS 即微软分布式文件系统的简称,系统管理员可以利用它来有效的整合网络资源,并把这些资源以单一的层次结构呈现给网络用户。管理员利用它可以把资源发布成一 个树形结构,这样大大简化了为用户进行资源配置和对资源管理的工作量。我们可以在不同的机器上调整和移动文件,这不会影响到用户的访问。 二、为什么要使用DES? 1、DFS使用了现有网络中的Share权限,管理员不必进行新的配置 2、通过一个DFS树形结构用户就可以访问多个网络资源,而不用再把远程驱动器映射到本地共享资源中。 3、DFS可以配 ...
  • 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无复本、数据存于哪个站点以及事务在哪个站点上执行等。 故名思义,分布式 ...
  • 好吧,总有我们的好朋友 谷歌在分布式计算上 维基百科的分布式计算 对此进行了数十年的计算机科学研究以及无数的私人和公共研究工作 - 所以如果你可以稍微关注一下这个问题会有所帮助。 Well there are always our good friends Google on distributed computing Wikipedia on distributed computing There have been decades of computer science research on this ...
  • 你所指的是单系统图像(SSI)计算。 该术语描述了用于高性能计算(不一定是分布式计算)的计算体系结构,其中单个操作系统正在运行,因此应用程序员将能够在该单个操作系统内运行多个线程。 这对应用程序开发人员来说具有很大的优势,即可以应用并行计算范例,开发人员不必处理来自分布式计算的复杂性,即集群中多台计算机之间的进程间计算以及缺少共享内存。 集群计算在过去获得了更多的兴趣。 这种趋势背后的驱动因素之一是集群可以轻松地在通用云服务之上实现,并且通常集群方法允许扩展到更大的尺寸,这通常是Web规模应用程序的要求。 ...
  • 这里有一个用于java, 一个用于c#,这里是一个开源网格工具包 。 Here's one for java and one for c# and here's an open source grid toolkit.
  • 只需按照群集设置指南操作: https://storm.apache.org/documentation/Setting-up-a-Storm-cluster.html 对于伪分布式设置,请在单台计算机中运行所有守护程序(ZK,Nimbus和一个单独的主管)。 Just follow the cluster setup guide: https://storm.apache.org/documentation/Setting-up-a-Storm-cluster.html For pseudo distri ...
  • 错误是由于事实 - BlockingQueue未在输出收集器中初始化; The error is due to the fact -- The BlockingQueue was not initilaized in the output collector;