共计 919 个字符,预计需要花费 3 分钟才能阅读完成。
我们知道,大数据的计算模式主要分为批量计算 (batch computing)、流式计算(stream computing)、交互计算(interactive computing)、图计算(graph computing) 等。其中,流式计算和批量计算是两种主要的大数据计算模式,分别适用于不同的大数据应用场景。
目前主流的流式计算框架有 Storm、Spark Streaming、Flink 三种,其基本原理如下:
Apache Storm
在 Storm 中,需要先设计一个实时计算结构,我们称之为拓扑(topology)。之后,这个拓扑结构会被提交给集群,其中主节点(master node)负责给工作节点(worker node)分配代码,工作节点负责执行代码。在一个拓扑结构中,包含 spout 和 bolt 两种角色。数据在 spouts 之间传递,这些 spouts 将数据流以 tuple 元组的形式发送;而 bolt 则负责转换数据流。
Apache Spark
Spark Streaming,即核心 Spark API 的扩展,不像 Storm 那样一次处理一个数据流。相反,它在处理数据流之前,会按照时间间隔对数据流进行分段切分。Spark 针对连续数据流的抽象,我们称为 DStream(Discretized Stream)。DStream 是小批处理的 RDD(弹性分布式数据集),RDD 则是分布式数据集,可以通过任意函数和滑动数据窗口(窗口计算)进行转换,实现并行操作。
Apache Flink
针对流数据 + 批数据的计算框架。把批数据看作流数据的一种特例,延迟性较低(毫秒级),且能够保证消息传输不丢失不重复。
Flink 创造性地统一了流处理和批处理,作为流处理看待时输入数据流是无界的,而批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。Flink 程序由 Stream 和 Transformation 这两个基本构建块组成,其中 Stream 是一个中间结果数据,而 Transformation 是一个操作,它对一个或多个输入 Stream 进行计算处理,输出一个或多个结果 Stream。
这三种计算框架的对比如下:
参考文章:
Streaming Big Data: Storm, Spark and Samza