美文网首页程序员
主流流式计算框架比较:storm,spark,flink

主流流式计算框架比较:storm,spark,flink

作者: Wayne维基 | 来源:发表于2019-11-19 18:08 被阅读0次

概要

参考:https://blog.csdn.net/dingxiangtech/article/details/83022673
参考:https://blog.csdn.net/xiao_jun_0820/article/details/79825077

功能指标 Storm Spark Flink
处理模式 native micro-batching native
消息保障 至少一次 有且一次 有且一次
实时性 低延迟,亚秒级 高延迟,秒级 低延迟,亚秒级
吞吐量 高(Storm3-5倍)
流量控制 不支持 支持 支持
容错方式 record ack rdd based check point check point

native Vs micro-batching

参考:https://www.cnblogs.com/tgzhu/p/7119477.html

  • 原生流处理:指所有输入的记录一旦到达即会一个接着一个进行处理。示例如下:

    • image
  • 微批处理:把输入的数据按照某种预先定义的时间间隔(典型的是几秒钟)分成短小的批量数据,流经流处理系统。示例如下:

    • image

两种方法都有其先天的优势和不足

  • 原生流处理的优势在于它的表达方式。数据一旦到达立即处理,这些系统的延迟性远比其它微批处理要好。除了延迟性外,原生流处理的状态操作也容易实现。一般原生流处理系统为了达到低延迟和容错性会花费比较大的成本,因为它需要考虑每条记录。原生流处理的负载均衡也是个问题。比如,我们处理的数据按key分区,如果分区的某个key是资源密集型,那这个分区很容易成为作业的瓶颈。

  • 微批处理。将流式计算分解成一系列短小的批处理作业,也不可避免的减弱系统的表达力。像状态管理或者join等操作的实现会变的困难,因为微批处理系统必须操作整个批量数据。并且,batch interval会连接两个不易连接的事情:基础属性和业务逻辑。相反地,微批处理系统的容错性和负载均衡实现起来非常简单,因为微批处理系统仅发送每批数据到一个worker节点上,如果一些数据出错那就使用其它副本。微批处理系统很容易建立在原生流处理系统之上。

主要原理

1 Apache Storm

在Storm中,需要先设计一个实时计算结构,我们称之为拓扑(topology)。之后,这个拓扑结构会被提交给集群,其中主节点(master node)负责给工作节点(worker node)分配代码,工作节点负责执行代码。在一个拓扑结构中,包含spout和bolt两种角色。数据在spouts之间传递,这些spouts将数据流以tuple元组的形式发送;而bolt则负责转换数据流。

2 Apache Spark

Spark Streaming,即核心Spark API的扩展,不像Storm那样一次处理一个数据流。相反,它在处理数据流之前,会按照时间间隔对数据流进行分段切分。Spark针对连续数据流的抽象,我们称为DStream(Discretized Stream)。 DStream是小批处理的RDD(弹性分布式数据集), RDD则是分布式数据集,可以通过任意函数和滑动数据窗口(窗口计算)进行转换,实现并行操作。

3 Apache Flink

官网:https://flink.apache.org/

针对流数据+批数据的计算框架。把批数据看作流数据的一种特例,延迟性较低(毫秒级),且能够保证消息传输不丢失不重复。

    • image.png

小结

Flink综合评分高,适合以下场景:

  • 消息投递语义为 Exactly Once
  • 高吞吐低延迟
  • 需要进行状态管理或窗口统计

ps:flink国内用户:阿里巴巴/美团/华为/滴滴/快手等,社区更新具有一定保障。

相关文章

网友评论

    本文标题:主流流式计算框架比较:storm,spark,flink

    本文链接:https://www.haomeiwen.com/subject/ezhgictx.html