AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

探寻流式计算

  • 2020-02-12
  • 本文字数:2676 字

    阅读完需:约 9 分钟

探寻流式计算

一、静态数据和流数据


  • 静态数据:为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据。

  • 流数据:以大量、快速、时变的流形式持续到达的数据。(例如:实时产生的日志、用户实时交易信息)


流数据具有以下特点:


(1)、数据快速持续到达,潜在大小也许是无穷无尽的。


(2)、数据来源众多,格式复杂。


(3)、数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储(存储于数据仓库)。


(4)、注重数据的整体价值,不过分关注个别数据。


(5)、数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。


在传统的数据处理流程中,总是先收集数据,然后将数据放到 DB 中。然后对 DB 中的数据进行处理。


流计算:为了实现数据的时效性,实时消费获取的数据。


二、批量计算和流计算


  • 批量计算:充裕时间处理静态数据,如 Hadoop。实时性要求不高。

  • 流计算:实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息(实时、多数据结构、海量)。


流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低,如用户点击流。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。流数据数据格式复杂、来源众多、数据量巨大,不适合采用批量计算,必须采用实时计算,响应时间为秒级,实时性要求高。批量计算关注吞吐量,流计算关注实时性。


流计算的特点:


1、实时(realtime)且无界(unbounded)的数据流。流计算面对计算的 是实时且流式的,流数据是按照时间发生顺序地被流计算订阅和消费。且由于数据发生的持续性,数据流将长久且持续地集成进入流计算系统。例如,对于网站的访问点击日志流,只要网站不关闭其点击日志流将一直不停产生并进入流计算系统。因此,对于流系统而言,数据是实时且不终止(无界)的。


2、持续(continuos)且高效的计算。流计算是一种”事件触发”的计算模式,触发源就是上述的无界流式数据。一旦有新的流数据进入流计算,流计算立刻发起并进行一次计算任务,因此整个流计算是持续进行的计算。


3、流式(streaming)且实时的数据集成。流数据触发一次流计算的计算结果,可以被直接写入目的数据存储,例如将计算后的报表数据直接写入 RDS 进行报表展示。因此流数据的计算结果可以类似流式数据一样持续写入目的数据存储。


三、流计算框架


为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎。对于一个流计算系统来说,它应达到如下需求:


  • 高性能:处理大数据的基本要求,如每秒处理几十万条数据。

  • 海量式:支持 TB 级甚至是 PB 级的数据规模。

  • 实时性:保证较低的延迟时间,达到秒级别,甚至是毫秒级别。

  • 分布式:支持大数据的基本架构,必须能够平滑扩展。

  • 易用性:能够快速进行开发和部署。

  • 可靠性:能可靠地处理流数据。


目前有三类常见的流计算框架和平台:商业级的流计算平台、开源流计算框架、公司为支持自身业务开发的流计算框架。


(1)商业级: InfoSphere Streams(IBM)和 StreamBase(IBM)。


(2)开源流计算框架,代表如下:Storm(Twitter)、 S4(Yahoo)。


(3)公司为支持自身业务开发的流计算框架:Puma(Facebook)、Dstream(百度)、银河流数据处理平台(淘宝)。


四、流计算框架 Storm


Storm 是 Twitter 开源的分布式实时大数据处理框架,随着流计算的应用日趋广泛, Storm 的知名度和作用日益提高。接下来介绍 Storm 的核心组件以及性能对比。


Storm 的核心组件


· Nimbus:即 Storm 的 Master,负责资源分配和任务调度。一个 Storm 集群只有一个 Nimbus。


· Supervisor:即 Storm 的 Slave,负责接收 Nimbus 分配的任务,管理所有 Worker,一个 Supervisor 节点中包含多个 Worker 进程。


· Worker:工作进程,每个工作进程中都有多个 Task。


· Task:任务,在 Storm 集群中每个 Spout 和 Bolt 都由若干个任务(tasks)来执行。每个任务都与一个执行线程相对应。


· Topology:计算拓扑,Storm 的拓扑是对实时计算应用逻辑的封装,它的作用与 MapReduce 的任务(Job)很相似,区别在于 MapReduce 的一个 Job 在得到结果之后总会结束,而拓扑会一直在集群中运行,直到你手动去终止它。拓扑还可以理解成由一系列通过数据流(Stream Grouping)相互关联的 Spout 和 Bolt 组成的的拓扑结构。


· Stream:数据流(Streams)是 Storm 中最核心的抽象概念。一个数据流指的是在分布式环境中并行创建、处理的一组元组(tuple)的无界序列。数据流可以由一种能够表述数据流中元组的域(fields)的模式来定义。


· Spout:数据源(Spout)是拓扑中数据流的来源。一般 Spout 会从一个外部的数据源读取元组然后将他们发送到拓扑中。根据需求的不同,Spout 既可以定义为可靠的数据源,也可以定义为不可靠的数据源。一个可靠的 Spout 能够在它发送的元组处理失败时重新发送该元组,以确保所有的元组都能得到正确的处理;相对应的,不可靠的 Spout 就不会在元组发送之后对元组进行任何其他的处理。一个 Spout 可以发送多个数据流。


· Bolt:拓扑中所有的数据处理均是由 Bolt 完成的。通过数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等功能,Bolt 几乎能够完成任何一种数据处理需求。一个 Bolt 可以实现简单的数据流转换,而更复杂的数据流变换通常需要使用多个 Bolt 并通过多个步骤完成。


· Stream grouping:为拓扑中的每个 Bolt 的确定输入数据流是定义一个拓扑的重要环节。数据流分组定义了在 Bolt 的不同任务(tasks)中划分数据流的方式。在 Storm 中有八种内置的数据流分组方式。


· Reliability:可靠性。Storm 可以通过拓扑来确保每个发送的元组都能得到正确处理。通过跟踪由 Spout 发出的每个元组构成的元组树可以确定元组是否已经完成处理。每个拓扑都有一个“消息延时”参数,如果 Storm 在延时时间内没有检测到元组是否处理完成,就会将该元组标记为处理失败,并会在稍后重新发送该元组。


1544611881082012146.png


图 1:Storm 核心组件


1544611910785026399.png


图 2:Storm 编程模型


主流计算引擎的对比


目前比较流行的实时处理引擎有 Storm,Spark Streaming,Flink。每个引擎都有各自的特点和应用场景。 下表是对这三个引擎的简单对比。


1544611943609012616.png


图 3:主流引擎性能对比


总结:流计算的出现拓宽了我们应对复杂实时计算需求能力。Storm 作为流计算的利器,极大方便了我们的应用。流计算引擎还在不断发展,基于 Storm 和 Flink 开发的 JStorm,Blink 等计算引擎在性能各方面都有极大的提高。流计算值得我们继续关注。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/197


2020-02-12 15:281151

评论

发布
暂无评论
发现更多内容

Java 多商户外贸版 PC 端功能,出场就是这么硬核!

CRMEB

什么是私域流量?

源字节1号

软件开发

深入理解MySQL主从复制原理以及集群部署过程

jiangxl

MySQL 数据库 运维 dba 签约计划第三季

常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)

程序员啊叶

Java 编程 程序员 架构 java面试

web前端技术前景如何?

小谷哥

责任链模式在转转精准估价中的应用

转转技术团队

设计模式 责任链

Redis总结:缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

程序员啊叶

Java 编程 程序员 架构 java面试

通过14个入门实战案例教大家快速学习Python编程语言

小院里的霍大侠

Python Python初学者 程序员‘ 编程入门 兴趣编程

尚硅谷Elasticsearch8.X视频教程

小谷哥

Seata 在蚂蚁国际银行业务的落地实践

SOFAStack

开源项目 seata 项目实践 多编程语言 蚂蚁国际

《数字经济 科技向善》大咖对谈干货来啦

易观分析

金融科技

续上,Python爬虫在 fiddler 中调用本地 JS 代码文件

梦想橡皮擦

Python 爬虫 7月月更

数据分析如何解决商业问题?这里有份超详细攻略

博文视点Broadview

WEB服务如何平滑的上下线

转转技术团队

nginx Java web

YonBuilder赋能创新,用友第四届开发者大赛“金键盘奖”开启竞逐!

科技热闻

2022 秋招 Java 岗面试高频问题总结

程序员啊叶

Java 编程 程序员 架构 java面试

Go语言系列:如何搭建Go语言开发环境?

小黑豆豆

后端 安装 教程 Go 语言 签约计划第三季

初学者入门:使用WordPress搭建一个专属自己的博客

hum建应用专家

数据库 Wordpress 博客部署 WordPress

es6 class 继承的重点

掘金安东尼

JavaScript 前端 ES6 7月月更

字节前端面试题总结

buchila11

前端面试

程序员培训学习后好找工作吗

小谷哥

以科技传递温度,vivo亮相数字中国建设峰会

极客天地

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+

程序员啊叶

Java 编程 程序员 架构 java面试

Snowflake vs. Databricks谁更胜一筹?2022年最新战报

雨果

数据中台 数据平台 snowflake DaaS数据即服务 Databricks

OpenAtom OpenHarmony分论坛,今天14:00见!附大事记精彩发布

OpenHarmony开发者

OpenHarmony

华硕无双,这可能是屏幕最好的平价高刷轻薄笔记本

科技热闻

面试官常问:如何手撸一个“消息队列”和“延迟消息队列”?

程序员啊叶

Java 编程 程序员 架构 java面试

在web前端培训机构应该如何学习前端

小谷哥

Java——AOP案例之测量业务层接口执行效率

王小凡

Java 程序员 apo

学习Java开发技术建议

小谷哥

腾讯云联合中国工联院发布工业AI质检标准化研究成果加速制造业智能化转型

科技热闻

探寻流式计算_语言 & 开发_姚远_InfoQ精选文章