【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

探寻流式计算

  • 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:28928

评论

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

数据灾备方案,华为云为何受众多企业信赖与选择?

平平无奇爱好科技

Bytebase 体验官之 MySQL 「SQL 审核」

朱亚光

GitHub排名第一《lntellij IDEA软件开发与应用实战手册》限时开源

Java你猿哥

Java spring ssm IDEA

简直人生外挂,直接涨薪25K,跪谢这份Java性能调优实战宝典

做梦都在改BUG

Java 性能优化 JVM 性能调优

阿里P8架构师珍藏版:SpringBoot入门到进阶笔记(面面俱到,太全了)

采菊东篱下

编程 微服务

《人间失格》

后台技术汇

三周年连更 人间失格

NPM 实用命令与快捷方式

SEAL安全

JavaScript npm 企业号 4 月 PK 榜

阿里云机器学习PAI发布基于HLO的全自动分布式系统 TePDist,并宣布开源!

阿里云大数据AI技术

深度学习 分布式系统 开源项目 企业号 4 月 PK 榜

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

Java你猿哥

redis 面试题 缓存穿透 缓存击穿 缓存雪崩

Guava的EventBus事件机制实现

Java你猿哥

Java 源码 ssm Guava EventBus

已献出膝盖!GitHub上的宝藏级SpringBoot核心宝典,讲得太清晰了

做梦都在改BUG

Java 架构 微服务 Spring Boot 框架

基于STM32设计的音乐播放器

DS小龙哥

三周年连更

java 开发 SSM 框架整合之 MyBatis 动态 SQL

Java你猿哥

Java sql mybatis SSM框架 if

华为云开源项目OpenTiny中TinyVue有什么优势?

英勇无比的消炎药

开源 Vue 组件库

共享电单车生产厂家如何选择

共享电单车厂家

共享电动车厂家 共享电单车生产 共享电动车厂商 本铯智能共享电动车商家

Spring循环依赖为何使用三级缓存?

Java你猿哥

Java spring 缓存 bean spring ioc

ThreadLocal源码分析

做梦都在改BUG

Java 源码 多线程 ThreadLocal

Tars-Cpp 协程实现分析

vivo互联网技术

协程 TARS

如何用DataTester设计并创建可视化实验

字节跳动数据平台

AB testing实战 A/B测试 企业号 4 月 PK 榜

七大关键技术,华为云数据库GaussD承载金融级核心系统

平平无奇爱好科技

云计算,

阿里开发实录:慢SQL拖垮数据库并引发故障

Java永远的神

数据库 sql 程序员 后端 架构师

中国浙江|浙江省级人才计划申报指南来了!

科兴未来News

双创比赛

商业堡垒机是什么意思?有免费版的商业堡垒机吗?

行云管家

网络安全 堡垒机 运维审计

阿里p8强烈推荐这部《从零开始学架构》堪称GitHub最强!

Java你猿哥

Java 架构 ssm 架构设计

掌握动态规划,从“什么问题适合用”及“解题思路”入手

华为云开发者联盟

人工智能 AI 华为云 华为云开发者联盟 企业号 4 月 PK 榜

从原理聊JVM(二):从串行收集器到分区收集开创者G1

京东科技开发者

G1 JVM 垃圾回收器 java 企业号 4 月 PK 榜

Android C++系列:C++11函数特殊特性

轻口味

c++ 三周年连更

每个Java程序员都必须知道的四种负载均衡算法

做梦都在改BUG

Java 负载均衡 负载均衡算法

【堡垒机】免费堡垒机介绍以及下载看这里!

行云管家

堡垒机 运维审计 免费 小微企业

ES的索引结构与算法解析

京东科技开发者

搜索引擎 elasticsearch 索引结构 ES 企业号 4 月 PK 榜

企业数据的最后防线——华为云数据灾备

YG科技

云计算,

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