从Storm到Flink:大数据处理的开源系统及编程模型

本文深入探讨了三种主流的开源分布式流处理系统——Apache Storm、Spark Streaming和Apache Flink,详细介绍了它们的编程模型、数据封装、并行度指定、数据分组与传输以及系统架构。Apache Storm以其实时性和高容错性著称,Spark Streaming采用微批处理,而Flink则以流处理为中心。文章通过WordCount应用举例,展示了各个系统的编程模型和工作原理。
摘要由CSDN通过智能技术生成

开源系统及编程模型

基于流计算的基本模型,当前已有各式各样的分布式流处理系统被开发出来。本节将对当前开源分布式流处理系统中三个最典型的代表性的系统:Apache Storm,Spark Streaming,Apache Flink以及它们的编程模型进行详细介绍。

 Apache Storm

Apache Storm是由Twitter公司开源的一个实时分布式流处理系统[2],被广泛应用在实时分析、在线机器学习连续计算、分布式RPC、ETL等场景。Storm支持水平扩展、具有高容错性,保证数据能被处理,而且处理速度很快。Storm支持多种编程语言,易于部署和管理,是目前广泛使用的流处理系统之一。

一、Storm中的数据封装

Storm系统可以从分布式文件系统(如HDFS)或分布式消息队列(如Kafka)中获取源数据,并将每个流数据元组封装称为tuple。一条数据流即是一个无边界的tuple序列,而这些tuple序列可以以分布式的方式创建和处理。在Storm中,数据流中的每个tuple相互独立,彼此间的处理上不存在任何关联。Tuple也是Storm中消息传递的基本单元,其数据结构如图5-3-1所示。

如图5-3-1所 示, 一 个tuple可以包含多个字段(field),每个字段代表对应流数据的一个属性,在Storm的每个操作组件发送向下游发送tuple时,会声明对应tuple每个字段的顺序和代表的含义(如数据的键、值、时间戳等)。

二、Storm中的应用拓扑建立

在Storm中, 用 户 所 提 交 的 应 用 所 构 建 的DAG拓扑被称为Topology。Storm的Topology类似于MapReduce中的一个job,但区别在于这个拓扑会永远运行(或者直到手动结束)。每个Topology中有两个重要组件:spout和bolt。

spout是Topology中数据流的来源,也即对应DAG模型中的起始操作。spout可以从外部源读取数据并将其以封装成tuple的形式发送到图 5-3-1 tuple的数据结构Topology中。bolt是Topology中对tuple进行处理的主要单元。Storm并不区分中间和终止操作,而是将其统一为bolt来进行实现,也即对结果的输出需要由用户自己来实现。所有对流数据的处理都是在bolt中实现,bolt可以执行各种基础操作,如过滤、聚合、连接等。bolt每处理完一个tuple后,可以按照应用需求发送给0个或多个tuple给下游的bolt。

三、Storm中的并行度指定

Storm中的并行度有三层含义。首先是worker进程数。Storm可以建立在分布式集群上,每台物理节点可以发起一个或多个worker进程。

一个worker对应一个物理的JVM(Java虚拟机)。通常,整个Topology会由一个或者多个worker进程来负责执行。每个worker会在一个JVM中运行一个或多个executor,每个executor对应一个线程,执行某一个spout或者bolt的计算任务。在Storm中,每个spout/bolt都可以实例化生成多个task在集群中运行,一般默认情况下,executor数与task数一一对应,也即每个实例都由一个单独的线程来执行。用户也可以指定task数大于executor数,这时部分task会由同一个线程循环调用来执行。在Storm的Topology建立时,用户可以根据需要依次来设定整体的worker进程数以及每个spout/bolt对应的executor数和task数。

四、Storm中的数据分组和传输

用户可以通过定义分组策略(streaming grouping)来决定数据流如何在不同的spout/bolt的task中进行分发和传输。分组策略将所有的spout和bolt连接起来构成一个Topology,如图5-3-2所示。除了5.2.4节所介绍的几种基本分组策略外,Storm还支持其他的分组策略。例如local grouping,这是shuffle grouping的 一 种 变 种 分 组 策 略。由于Storm划分多个worker进程,如果你对大数据开发感兴趣,想系统学习大数据的话,可以加入大数据技术学习交流扣群:458数字345数字782获取学习资源,shuffle grouping可能导致大量的进程间通信,local grouping则是将元组优先发往与自己同进程的下游task中,若没有这种下游task,才继续沿用shuffle grouping的方式。

图 5-3-2 streaming grouping

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值