首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大数据运营技术与工具:分布式实时流式计算框架

内容摘要

Hadoop MapReduce适用于批量离线计算场景,无法满足实时流式计算需求,为此业界提出了Storm、Spark Streaming、Flink等开源计算框架,本节主要介绍Storm实时流式计算框架的实现原理。

分布式实时流式计算框架

在现实生活中,许多应用场景要求系统能够实时做出响应,比如:商品实时推介、广告投放、消费额度提醒、实时的风险控制、实时统计、网络故障预防、无线带宽分配、热门话题推送、汽车超速报警等

在很多情况下,系统的实时性就是核心竞争力,也是企业把握商机得力抓手。

例如,商品实时推介、广告投放等能够提升企业产品销售能力,实时的风险控制、实时统计能够提高企业管理能力,消费额度提醒可以提升企业客户服务能力。

Hadoop实现大规模数据计算的方法是,首先将数据切割为大数据块后存入HDFS集群,然后根据数据统计需求,采用MapReduce计算框架对集群中的数据并行地完成提取(Map)和聚合(Reduce)操作,这种计算模型是无法满足实时计算的,因此需要换一个思路。

为了弥补Hadoop在大规模数据实时计算方面的不足,满足应用响应的实时性需求,业界提出了许多分布式实时流式计算框架,这其中以Twitter开源的Storm、伯克利大学的AMPLab实验室开源的Spark Streaming、Flink最为典型。

为了清晰地看到分布式实时流式计算技术如何解决大规模数据的实时计算的思路和方法,下面我们对Storm的实现原理为例进行简单分析。

Storm开源框架包括的概念有:Nimbus、Zookeeper、Supervisor、Worker、Task、Topology、Spout、Bolt、Tuple、Stream、Stream Grouping。

它们各自的分工如下:

# Nimbus:主要负责资源分配和任务调度,与Hadoop的JobTracker相对应;

# Zookeeper:负责维护配置信息、命名服务、分布式同步、分组服务;

# Supervisor:负责接受Nimbus分配的任务,启动和停止worker进程,与Hadoop的TaskTracker相对应;

# Task:worker中执行spout/bolt的线程;

# Worker:运行具体处理组件逻辑的进程,worker中包含1个或者多个task,与Hadoop的Child相对应;

# Topology:是反应数据处理的拓扑结构,与Hadoop的Job相对应;

# Spout:意为“喷射”,就像自来水一样,采集数据源并将其发送到bolt,与Hadoop的Map相对应;

# Bolt:接受数据任何执行的组件,执行动作包括过滤、函数操作、合并、写数据库等,与Hadoop的Reduce相对应;

# Tuple:即元组,一次消息传递的基本单元;

# Stream:多个tuple就组成了源源不断的stream;

# Stream Grouping:流分组策略告诉topology如何在两个组件之间发生tuple。

分组策略包括:shuffle、field、all、direct等,shuffle是随机发送方式,direct为指定目的地分组发送方式,field为按字段分组发送方式,all为广播发送方式。

为了直观地看到Storm的实现原理,我们从基于Topology(Spout/Bolt)的流式设计、流分组方式设计、分布式集群设计,三个层面进行剖析。

基于Topology(Spout/Bolt)的流式设计思路,如图8-3-5所示:

图8-3-5 Storm的Topology结构

从图8-3-5可以看出,Storm的Topology实际上是对Spout和Bolt之间关系的定义,Spout是数据源,为Bolt注入数据,Bolt的数据源既可以来自于Spout,也可以来自于其它Bolt。

来自Spout的数据流需要发送到Bolt进行处理(比如过滤、汇总、写数据库等),spout输出的数据以怎样的方式发送到Bolt则需要通过Stream Grouping进行定义,比如是随机发送、按字段发送还是指定目的bolt发送。

Stream Grouping计算模型如图8-3-6所示:

图8-3-6 Storm流分组(Stream Grouping)

从图8-3-6可以看出,可以通过流分组的方式决定将数据流发送给哪个Bolt处理,这样就可以按照预先定义来处理数据。

以用户Web行为偏好实时(浏览、检索)统计为例,当用户浏览某个网页或者按照某个关键字搜索后,Spout就可以将用户的行为数据发送到Bolt处理。

Bolt可以按照流分组策略(比如按字段分组)发送到指定的Bolt进行统计(总数加1),这样就可以实时看到用户浏览网页的次数或者搜索关键字的次数,这些统计数据可以作为热门商品和热门搜索关键字展示给用户。

Storm框架的优势在于实时处理大规模数据,因此当完成Storm应用开发后,需要将其部署到分布式集群之中,Storm的分布式部署架构实现方式,如图8-3-7所示:

图8-3-7 Storm的集群管理方式

从图8-3-7可以看出,Storm采用三级管理方式:

第一级是Nimbus,根据集群资源的占用情况进行资源分配和调度。

第二级为Zookeeper,Zookeeper为动物管理员的意思,负责维护集群配置信息、分布式同步以及分组等工作。

第三级为Supervisor,Supervisor负责接受Nimbus发来的任务,启动或者停止worker任务。

如果将Storm的集群管理模式与企业管理模式对比,那么Nimbus则相当于企业的CEO,在企业全局层面上分配和调度人、财、物等资源,而Supervisor则相当于各个职能部门的经理,负责传达CEO的命令,比如开始干活或者停止干活。

Worker则相当于企业的基层员工,负责根据职能部门经理的要求完成指定的工作,Zookeeper则相当于企业的分管副总,负责对各个职能部门的工作进行同步,以保证企业能够按步骤、有序地完成任务。

除了开源框架Storm和Spark之外,还包括许多分布式实时流式计算技术,例如Yahoo的S4(SimpleScalable Streaming System)、IBM的StreamBase、微软公司的TimeStream,Facebook的DataFreeway and Puma等。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200521A01ZNK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券