探寻流式计算

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 流计算的出现拓宽了应对复杂实时计算需求能力。Storm作为流计算的利器,极大方便了应用。

一、静态数据和流数据

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

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

流数据具有以下特点:

(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 在延时时间内没有检测到元组是否处理完成,就会将该元组标记为处理失败,并会在稍后重新发送该元组。

1

(图1:Storm核心组件)

2

(图2:Storm编程模型)

主流计算引擎的对比

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

3

(图3:主流引擎性能对比)

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

参考资料:

【1】http://storm.apache.org/releases/current/Concepts.html

【2】https://en.wikipedia.org/wiki/Storm_(event_processor)

【3】https://toutiao.io/posts/88a6nt

【4】https://blog.csdn.net/fjse51/article/details/53886516

【5】https://www.cnblogs.com/xuwujing/p/8584684.html

【6】https://www.douban.com/note/642346037/

【7】https://www.cnblogs.com/ostin/articles/7256003.html

【8】https://tech.meituan.com/real_timedata_measure.html

【9】http://www.cnblogs.com/jiyukai/p/9471944.html

作者:姚远

来源:宜信技术学院

相关文章
|
3月前
|
存储 数据管理 BI
揭秘数据仓库的奥秘:数据究竟如何层层蜕变,成为企业决策的智慧源泉?
【8月更文挑战第26天】数据仓库是企业管理数据的关键部分,其架构直接影响数据效能。通过分层管理海量数据,提高处理灵活性及数据一致性和安全性。主要包括:数据源层(原始数据)、ETL层(数据清洗与转换)、数据仓库层(核心存储与管理)及数据服务层(提供分析服务)。各层协同工作,支持高效数据管理。未来,随着技术和业务需求的变化,数仓架构将持续优化。
76 3
|
3月前
|
消息中间件 大数据 Kafka
"Apache Flink:重塑大数据实时处理新纪元,卓越性能与灵活性的实时数据流处理王者"
【8月更文挑战第10天】Apache Flink以卓越性能和高度灵活性在大数据实时处理领域崭露头角。它打破批处理与流处理的传统界限,采用统一模型处理有界和无界数据流,提升了开发效率和系统灵活性。Flink支持毫秒级低延迟处理,通过时间窗口、状态管理和自动并行化等关键技术确保高性能与可靠性。示例代码展示了如何使用Flink从Kafka读取实时数据并进行处理,简明扼要地呈现了Flink的强大能力。随着技术进步,Flink将在更多场景中提供高效可靠的解决方案,持续引领大数据实时处理的发展趋势。
102 7
|
3月前
|
消息中间件 数据挖掘 Kafka
揭秘大数据时代的极速王者!Flink:颠覆性流处理引擎,让实时数据分析燃爆你的想象力!
【8月更文挑战第29天】Apache Flink 是一个高性能的分布式流处理框架,适用于高吞吐量和低延迟的实时数据处理。它采用统一执行引擎处理有界和无界数据流,具备精确状态管理和灵活窗口操作等特性。Flink 支持毫秒级处理和广泛生态集成,但学习曲线较陡峭,社区相对较小。通过实时日志分析示例,我们展示了如何利用 Flink 从 Kafka 中读取数据并进行词频统计,体现了其强大功能和灵活性。
72 0
|
4月前
|
机器学习/深度学习 存储 分布式计算
驾驭数据洪流:大数据处理的技术与应用
大数据处理不仅是信息技术领域的一个热门话题,也是推动各行各业创新和发展的重要力量。随着技术的进步和社会需求的变化,大数据处理将继续发挥其核心作用,为企业创造更多的商业价值和社会贡献。未来,大数据处理将更加注重智能化、实时性和安全性,以应对不断增长的数据挑战。
|
存储 算法 搜索推荐
海量数据处理
海量数据处理
161 0
|
消息中间件 存储 cobar
我与流式计算的故事
聊聊流式计算吧 , 那一段经历于我而言很精彩,很有趣,想把这段经历分享给大家。
|
SQL 分布式计算 大数据
大数据实时处理的王者-Flink
大数据实时处理的王者-Flink
315 0
大数据实时处理的王者-Flink
|
消息中间件 监控 Java
实时即未来?一个小微企业心中的流计算
本文由墨芷技术团队唐铎老师分享,主要讲述其技术团队内部引入流计算的整个过程,包括最初的决策、期间的取舍以及最终落地,一路走来他们的思考、感悟以及经验分享。
实时即未来?一个小微企业心中的流计算
|
SQL 新零售 存储
一文揭秘阿里实时计算Blink核心技术:如何做到唯快不破?
本文主要讲解阿里巴巴实时大数据和相关的机器学习技术,以及这些技术如何实现大数据升级,最终取得卓越的双11战果。
14725 0
|
测试技术
大数据架构如何做到流批一体?
大数据与现有的科技手段结合,对大多数产业而言都能产生巨大的经济及社会价值。这也是当下许多企业,在大数据上深耕的原因。
422 0