网站设计杭州,四川省建筑信息网查询系统,室内设计公司排名榜,山西高端网站建设许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍#xff0c;然后尝试快速、高度概述其异同。 Apache Storm 在Storm中#xff0c;先要设计一个用于实时计算的图状结构#xff0c;我们称之为拓扑#xff08;topology#x…许多分布式计算系统都可以实时或接近实时地处理大数据流。本文将对三种Apache框架分别进行简单介绍然后尝试快速、高度概述其异同。 Apache Storm 在Storm中先要设计一个用于实时计算的图状结构我们称之为拓扑topology。这个拓扑将会被提交给集群由集群中的主控节点master node分发代码将任务分配给工作节点worker node执行。一个拓扑中包括spout和bolt两种角色其中spout发送消息负责将数据流以tuple元组的形式发送出去而bolt则负责转换这些数据流在bolt中可以完成计算、过滤等操作bolt自身也可以随机将数据发送给其他bolt。由spout发射出的tuple是不可变数组对应着固定的键值对。 Apache Spark Spark Streaming是核心Spark API的一个扩展它并不会像Storm那样一次一个地处理数据流而是在处理前按时间间隔预先将其切分为一段一段的批处理作业。Spark针对持续性数据流的抽象称为DStreamDiscretizedStream一个DStream是一个微批处理micro-batching的RDD弹性分布式数据集而RDD则是一种分布式数据集能够以两种方式并行运作分别是任意函数和滑动窗口数据的转换。 Apache Samza Samza处理数据流时会分别按次处理每条收到的消息。Samza的流单位既不是元组也不是Dstream而是一条条消息。在Samza中数据流被切分开来每个部分都由一组只读消息的有序数列构成而这些消息每条都有一个特定的IDoffset。该系统还支持批处理即逐次处理同一个数据流分区的多条消息。Samza的执行与数据流模块都是可插拔式的尽管Samza的特色是依赖Hadoop的Yarn另一种资源调度器和Apache Kafka。 共同之处 以上三种实时计算系统都是开源的分布式系统具有低延迟、可扩展和容错性诸多优点它们的共同特色在于允许你在运行数据流代码时将任务分配到一系列具有容错能力的计算机上并行运行。此外它们都提供了简单的API来简化底层实现的复杂程度。 三种框架的术语名词不同但是其代表的概念十分相似 对比图 下面表格总结了一些不同之处 数据传递形式分为三大类 最多一次At-most-once消息可能会丢失这通常是最不理想的结果。最少一次At-least-once消息可能会再次发送没有丢失的情况但是会产生冗余。在许多用例中已经足够。恰好一次Exactly-once每条消息都被发送过一次且仅仅一次没有丢失没有冗余。这是最佳情况尽管很难保证在所有用例中都实现。 另一个方面是状态管理对状态的存储有不同的策略Spark Streaming将数据写入分布式文件系统中例如HDFSSamza使用嵌入式键值存储而在Storm中或者将状态管理滚动至应用层面或者使用更高层面的抽象Trident。 用例 这三种框架在处理连续性的大量实时数据时的表现均出色而高效那么使用哪一种呢选择时并没有什么硬性规定最多就是几个指导方针。 如果你想要的是一个允许增量计算的高速事件处理系统Storm会是最佳选择。它可以应对你在客户端等待结果的同时进一步进行分布式计算的需求使用开箱即用的分布式RPCDRPC就可以了。最后但同样重要的原因Storm使用Apache Thrift你可以用任何编程语言来编写拓扑结构。如果你需要状态持续同时/或者达到恰好一次的传递效果应当看看更高层面的Trdent API它同时也提供了微批处理的方式。 使用Storm的公司有Twitter雅虎Spotify还有The Weather Channel等。 说到微批处理如果你必须有状态的计算恰好一次的递送并且不介意高延迟的话那么可以考虑Spark Streaming特别如果你还计划图形操作、机器学习或者访问SQL的话Apache Spark的stack允许你将一些library与数据流相结合Spark SQLMllibGraphX它们会提供便捷的一体化编程模型。尤其是数据流算法例如K均值流媒体允许Spark实时决策的促进。 使用Spark的公司有亚马逊雅虎NASA JPLeBay还有百度等。 如果你有大量的状态需要处理比如每个分区都有许多十亿位元组那么可以选择Samza。由于Samza将存储与处理放在同一台机器上在保持处理高效的同时还不会额外载入内存。这种框架提供了灵活的可插拔API它的默认execution、消息发送还有存储引擎操作都可以根据你的选择随时进行替换。此外如果你有大量的数据流处理阶段且分别来自不同代码库的不同团队那么Samza的细颗粒工作特性会尤其适用因为它们可以在影响最小化的前提下完成增加或移除的工作。 使用Samza的公司有LinkedInIntuitMetamarketsQuantiplyFortscale等。 结论 本文中我们只对这三种Apache框架进行了简单的了解并未覆盖到这些框架中大量的功能与更多细微的差异。同时文中这三种框架对比也是受到限制的因为这些框架都在一直不断的发展这一点是我们应当牢记的。转载于:https://www.cnblogs.com/myibm/p/5946411.html