写点什么

探寻流式计算

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

评论

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

Java-vs-Kotlin,Android开发人员应该选择哪种语言?,kotlin脱糖

android 程序员 移动开发

Java虚拟机规范(Java SE 8) 第一章,赶紧收藏起来

android 程序员 移动开发

博睿数据“智能体验运营,释放商业潜能”催化剂项目获TM Forum创新方案最佳实施奖

博睿数据

Jetpack-在数据变化时如何优雅更新Views数据,ffmpeg音视频开发实战6下载

android 程序员 移动开发

Jetpack Compose 1,阿里P8架构师Android大厂面试题总结

android 程序员 移动开发

Jetpact Compose状态管理简单理解,android设计模式的应用场景

android 程序员 移动开发

JNI 与 NDK 入门(一),设计思想与代码质量优化+程序性能优化+开发效率优化

android 程序员 移动开发

2021年日志审计设备选哪家好?咨询电话多少?

行云管家

云计算 日志审计 数据审计

太顶了!华为高工用一份423页的网络协议笔记把计算机网络讲清了

程序员 程序人生 网络协议

JAVA-Android-多线程实现方式及并发与同步,写给1-3年Android程序员的几点建议

android 程序员 移动开发

ZOHO | 破解这家ToB厂商持续增长的密码

海比研究院

Jetpack Compose和View的互操作性,这个回答让我错失offer

android 程序员 移动开发

Jetpack 之 LifeCycle 组件使用详解,android开发书籍

android 程序员 移动开发

贝壳Flutter瘦身实践

贝壳大前端技术团队

flutter 瘦身 for web

Kotlin 的协程用力瞥一眼,大厂架构师经验分享

android 程序员 移动开发

IOC架构设计之控制反转和依赖注入(一),原理讲解

android 程序员 移动开发

等保测评机构需要年审吗?还是一直有效?

行云管家

云计算 网络安全 数据安全 等保 等级保护

沉浸式体验,文化与科技融合创新的新业态

海比研究院

入选《2021爱分析·区域性银行数字化厂商全景报告》,网易云信助力南京银行打造转型标杆

网易云信

人工智能 金融行业

Jetpack组件---ViewModel 概览,android高级面试2020

android 程序员 移动开发

Kotlin 插件的落幕,ViewBinding 的崛起,音视频开发工程师

android 程序员 移动开发

HMS Core 5,Android开发教程

android 程序员 移动开发

Kotlin 协程和 Android SQLite API 中的线程模型,嵌入式系统工程师面试

android 程序员 移动开发

Kotlin-源码里成吨的-noinline-和-crossinline-是干嘛的?

android 程序员 移动开发

HashMap 源码解析一、构造函数,kotlin插件

android 程序员 移动开发

IGG:Android内存回收机制原理是什么,flutterlistview滚动卡顿

android 程序员 移动开发

Kotlin + 协程 + Retrofit ,携程Android面试题

android 程序员 移动开发

Kotlin(1) lambda表达式和高阶函数操作符,android软件开发基础

android 程序员 移动开发

Kotlin-新版来了,支持跨平台!,android热修复实现

android 程序员 移动开发

最新消息!旺链科技加入庙行镇“乐创助企联盟”

旺链科技

区块链 产业区块链

Kotlin-编程核心基石—高阶函数,androidrom定制

android 程序员 移动开发

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