Apache流处理框架对比

分布式流处理,类似于MapReduce这样的通用计算模型,但是却要求它能够在毫秒级别或者秒级别完成响应。这些系统可以用DAG表示流处理的拓扑。

Points of Interest

在比较不同系统是,可以参照如下几点

  • Runtime and Programming model(运行与编程模型)

一个平台提供的编程模型往往会决定很多它的特性,并且这个编程模型应该足够处理所有可能的用户案例。

  • Functional Primitives(函数式单元)

一个合格的处理平台应该能够提供丰富的能够在独立信息级别进行处理的函数,像map、filter这样易于实现与扩展的一些函数。同样也应提供像aggregation这样的跨信息处理函数以及像join这样的跨流进行操作的函数,虽然这样的操作会难以扩展。

  • State Management(状态管理)
  • Message Delivery Guarantees(消息投递的可达性保证)
    • at most once
    • at least once
    • exactly once

一般来说,对于消息投递而言,我们有至多一次(at most once)、至少一次(at least once)以及恰好一次(exactly once)这三种方案。

  • Failures Handling

在一个流处理系统中,错误可能经常在不同的层级发生,譬如网络分割、磁盘错误或者某个节点莫名其妙挂掉了。平台要能够从这些故障中顺利恢复,并且能够从最后一个正常的状态继续处理而不会损害结果。

除此之外,我们也应该考虑到平台的生态系统、社区的完备程度,以及是否易于开发或者是否易于运维等等。

Runtime and Programming Model

运行环境和编程模型确定了系统的能力和使用的用户案例。因为它定义了整个系统的呈现特性、可能支持的操作以及未来的一些限制等等。

目前,主要有两种不同的方法来构建流处理系统

1) 其中一个叫Native Streaming,意味着所有输入的记录或者事件都会根据它们进入的顺序一个接着一个的处理。

优点:响应延迟较短

缺点:吞吐量较低;因为需要去持久化所以容错代价更高;负载均衡也是不容忽视的问题

2)另一种方法叫做Micro-Batching。大量短的Batches会从输入的记录中创建出然后经过整个系统的处理,这些Batches会根据预设好的时间常量进行创建,通常是每隔几秒创建一批。

优点:容错和负载均衡更易实现

缺点:一些类似于状态管理的或者joins、splits这些操作也会更加难以实现,因为系统必须去处理整个Batch

而就编程模型而言,又可以分为Compositional(组合式)与Declarative(声明式)。

1)组合式会提供一系列的基础构件,类似于源读取与操作符等等,开发人员需要将这些基础构件组合在一起然后形成一个期望的拓扑结构。新的构件往往可以通过继承与实现某个接口来创建。

2)另一方面,声明式API中的操作符往往会被定义为高阶函数。声明式编程模型允许我们利用抽象类型和所有其他的精选的材料来编写函数式的代码以及优化整个拓扑图。同时,声明式API也提供了一些开箱即用的高等级的类似于窗口管理、状态管理这样的操作符。

Apache Streaming Landscape

目前已经有了各种各样的流处理框架,自然也无法在本文中全部攘括。所以我必须将讨论限定在某些范围内,本文中是选择了所有Apache旗下的流处理的框架进行讨论,并且这些框架都已经提供了Scala的语法接口。主要的话就是Storm以及它的一个改进Trident Storm,还有就是当下正火的Spark。最后还会讨论下来自LinkedIn的Samza以及比较有希望的Apache Flink。笔者个人觉得这是一个非常不错的选择,因为虽然这些框架都是出于流处理的范畴,但是他们的实现手段千差万别。

  • Apache Storm 最初由Nathan Marz以及他的BackType的团队在2010年创建。后来它被Twitter收购并且开源出来,并且在2014年变成了Apache的顶层项目。毫无疑问,Storm是大规模流处理中的先行者并且逐渐成为了行业标准。Storm是一个典型的Native Streaming系统并且提供了大量底层的操作接口。另外,Storm使用了Thrift来进行拓扑的定义,并且提供了大量其他语言的接口。
  • Trident 是一个基于Storm构建的上层的Micro-Batching系统,它简化了Storm的拓扑构建过程并且提供了类似于窗口、聚合以及状态管理等等没有被Storm原生支持的功能。另外,Storm是实现了至多一次的投递原则,而Trident实现了恰巧一次的投递原则。Trident 提供了 Java, Clojure 以及 Scala 接口。
  • 众所周知,Spark是一个非常流行的提供了类似于SparkSQL、Mlib这样内建的批处理框架的库,并且它也提供了Spark Streaming这样优秀地流处理框架。Spark的运行环境提供了批处理功能,因此,Spark Streaming毫无疑问是实现了Micro-Batching机制。输入的数据流会被接收者分割创建为Micro-Batches,然后像其他Spark任务一样进行处理。Spark 提供了 Java, Python 以及 Scala 接口。
  • Samza最早是由LinkedIn提出的与Kafka协同工作的优秀地流解决方案,Samza已经是LinkedIn内部关键的基础设施之一。Samza重负依赖于Kafaka的基于日志的机制,二者结合地非常好。Samza提供了Compositional接口,并且也支持Scala。
  • 最后聊聊Flink. Flink可谓一个非常老的项目了,最早在2008年就启动了,不过目前正在吸引越来越多的关注。Flink也是一个Native Streaming的系统,并且提供了大量高级别的API。Flink也像Spark一样提供了批处理的功能,可以作为流处理的一个特殊案例来看。Flink强调万物皆流,这是一个绝对的更好地抽象,毕竟确实是这样。

下表就简单列举了上述几个框架之间的特性:

Reference

Rhttps://segmentfault.com/a/1190000004593949?_ea=665564

时间: 2024-10-30 05:44:13

Apache流处理框架对比的相关文章

流式处理框架对比

分布式流处理是对无边界数据集进行连续不断的处理.聚合和分析的过程,与MapReduce一样是一种通用计算框架,期望延迟在毫秒或者秒级别.这类系统一般采用有向无环图(DAG).DAG是任务链的图形化表示,用它来描述流处理作业的拓扑.在选择不同的流处理系统时,通常会关注以下几点: 运行时和编程模型:平台框架提供的编程模型决定了许多特色功能,编程模型要足够处理各种应用场景. 函数式原语:流处理平台应该能提供丰富的功能函数,比如,map或者filter这类易扩展.处理单条信息的函数;处理多条信息的函数a

Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?

转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布式消息处理系统Apache Kafka来实现消息服务,并使用资源管理器Apache Hadoop YARN实现容错处理.处理器隔离.安全性和资源管理.近日,从Apache官方博客中得知,开源的分布式流处理框架Samza历经18个月的孵化期后终于升级成为Apache的顶级项目.Samza由Linked

Storm与Spark、Hadoop三种框架对比

一.Storm与Spark.Hadoop三种框架对比 Storm与Spark.Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景.所以,在不同的应用场景下,应该选择不同的框架. 1.Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义.Storm的适用场景:1)流数据处理Storm可以用来处理源源不断流进来

大数据框架对比:Hadoop、Storm、Samza、Spark和Flink--容错机制(ACK,RDD,基于log和状态快照),消息处理at least once,exactly once两个是关键

分布式流处理是对无边界数据集进行连续不断的处理.聚合和分析.它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别.这类系统一般采用有向无环图(DAG). DAG是任务链的图形化表示,我们用它来描述流处理作业的拓扑.如下图,数据从sources流经处理任务链到sinks.单机可以运行DAG,但本篇文章主要聚焦在多台机器上运行DAG的情况. 关注点 当选择不同的流处理系统时,有以下几点需要注意的: 运行时和编程模型:平台框架提供的编程模型决定了许多特色功能,编程模型要足够处理各种

TensorFlow与主流深度学习框架对比

引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年11月开源的机器学习及深度学习框架. TensorFlow在2015年年底一出现就受到了极大的关注,在一个月内获得了GitHub上超过一万颗星的关注,目前在所有的机器学习.深度学习项目中排名第一,甚至在所有的Python项目中也排名第一.本文将带我们简单了解下TensorFlow,并与其他主流深度学

主流深度学习框架对比

深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe.Keras.CNTK.Torch7.MXNet.Leaf.Theano.DeepLearning4.Lasagne.Neon,等等.然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势.表2-1所示为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在star数量.fork数量.contributor数量这三个数

Android &Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

MVVM框架对比

MVVM框架对比 MVC和MVP简介 MVVM Vue.js.Angular.js.Ember.Backbone等框架对比 双向绑定原理 Virtual DOM 前端由于发展比较迅速,框架的更新迭代也比较快,从最初的 backbone.js 到后来的Ember.Knockout.Angular.js, 再到现在的Vue.js.React. MVC和MVP简介 视图(view):用户界面 控制器(controller):业务逻辑 模型(model):数据保存 通信方式如下: view传送指令到co

各种ORM框架对比(理论篇,欢迎来观摩)

各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数据库,开发入手比较快,二次开发扩展简单,模型Emit映射,数据交互需要Code,并且需要编写脚本,接口上有自动翻页,支持多对象查询返回 使用示例: //保存对象 db.Save(article); db.Save(new Article { Title = "Super easy to use Pe