无处不在的流计算到底是什么?终于有人讲明白了

导读:两千多年以前,孔老夫子站在大河边,望着奔流而去的河水,不禁感叹:“逝者如斯夫,不舍昼夜。”老夫子是在叹惜着韶华白首,时光易逝!

两千多年以后的今天,当你我抱着手机读书、追剧、抢票、剁手、刷小视频、发红包的时候,一道道信息流正在以光速在世界范围内传递和传播。

本文就从“流”讲起,带你了解什么是流计算,它都有哪些优势?用在了哪些地方?

作者:周爽

来源:大数据DT(ID:hzdashuju)

自从互联网和物联网诞生以来,人与人、人与物、物与物之间的互联和互动愈加紧密和频繁,大量丰富多彩的数据在互联和互动的过程中产生。海量的数据洪流将我们的时间和空间愈占愈满,以至于让我们开始疲于奔命,鲜有时间和能力再去感受和思考那些一瞬间的百万种可能。

武林江湖中留传着一句至理名言:“天下武功,无坚不摧,唯快不破!”。

更快更完整地获取数据,更快更充分地挖掘出数据价值,业已成为大数据时代各行各业的共识。在线系统监控、移动数据和物联网、金融风控、推荐系统等,虽然行业各不相同,但是它们有个共同点——“实时流计算”技术在这些领域发挥着越来越重要的作用。

01 “流”好在哪里?

“流”是一种非常好的编程模式。

▲图1:代表流计算模式的有向无环图DAG

首先,“流”与“异步”不谋而合。

“流”的各个节点通过队列传递消息,不同节点的执行正好就是完全异步的。并且由于有队列隔离,不同节点的执行完全不用考虑并发安全的问题。“流”在内部执行时是异步和并行的,能最大限度提高资源使用效率,提高程序执行性能。

可以说,“流”是“异步”的一种重要表现方式,“异步”则是“流”在执行时的内禀性质。

▲图2:“流”和“异步”,傻傻分不清楚!

其次,如果“流”的执行节点间使用的是阻塞队列,那么整个流的各个执行环节就天然地带有了反向压力能力,让我们不必担心很多异步系统在高负载而又临时处理能力不足时造成的OOM问题。

再次,“流”能够非常自然地描述业务执行的流程。不管是大到整个产品线的各个服务模块,还是小到每个服务模块中的具体实现步骤。就像“分形”一样,“流”能够做任意细力度的划分。这是一种非常普遍的描述事情发生过程的模式。

最后,通过类似于Kafka这样消息中间件的隔离,可以非常清晰地定义模块和模块之间的边界,从设计模式中高内聚、低耦合的角度来看,是一种非常不错的实践!

02 流计算解决了什么问题?

总的来说,我们使用流计算主要是为了计算以下几类问题。

1. 流数据操作

流数据操作可以说是流计算系统与生俱来的能力,它本身是针对数据流的转化或转移处理,所以实现和使用起来都相对更加直观。

流数据操作的内容主要包括了三类:对数据进行清洗、规整和结构化,对不同来源的数据进行关联及合并,以及在不同系统之间搬运数据。这三类操作通过一些常用的流式API就可以实现。

2. 单点特征计算

一个事件中包含的用户是否在黑名单中?发生事件的设备是否是模拟器?温度传感器传来的温度事件是否已经超出正常温度范围?发送消息设备的IP是否是代理?一次交易的金额是否属于大额交易?手机是否有SIM卡?

诸如此类的问题,要么可以通过黑白名单,要么能够通过特定的规则计算而得到答案,实现起来相对简单,所以我们将这类特征计算称之为单点特征。

3. 时间维度聚合特征计算

相同设备的1小时内注册事件次数、相同银行卡号的7天交易事件次数、过去30天内同一IP段上交易金额、过去1分钟高温事件的次数、过去5分钟日志告警事件的次数……

诸如此类特征在诸如风控、预警、监控等各种场景都非常广泛的应用。分析不难发现,这类特征都有个共同特点,它们均需要在时间维度对数据进行聚合运算。因此,我们称这类特征为时间维度聚合特征。

4. 关联图谱特征计算

除了时间维度的聚合分析外,我们还经常进行“空间”维度的聚合分析。不过这种分析有个更专业的名字,即“关联图谱”分析。

比如在一些风控场景中,我们需要计算用户账户使用IP的个数、同一手机号码发生在不同城市的个数、同一设备上关联用户的数目、同一用户关联设备的数目、同一推荐人推荐的用户数等特征。

以设备关联用户数为例,如果某个设备上注册的用户很多,那么它的风险就比较高,毕竟正常情况下我们都只会用自己的手机注册自己的账号,而不会是帮其他几十、上百人注册账号的。

5. 事件序列分析

数据流中的数据不是单纯在时间上有着先来后到的关系,而是在数据和数据之间也有着联系。

考虑用户在手机上安装新APP的过程,它可能是先点击了某个广告链接,然后下载并安装了APP,最后成功注册了账号。从“点击”到“下载”,再到“安装”和“注册”,这就完成了一次将广告转化为用户的过程。

再比如在网络欺诈识别场景中,如果用户在新建账号后,立马发生大量交易行为。那么这种“新建账号”到“10分钟内5次交易”的行为就是种非常可疑的行为了。

诸如此类从数据流表示的事件流中,检测并筛选出符合特定模式或行为的事件序列的过程,我们称之为复杂事件处理(Complex Event Processing,简称为CEP)。CEP也是流计算经常被用来解决的问题。

6. 模型学习和预测

随着流计算越来越流行和普及,越来越多的原本主要针对离线批式数据的统计和机器学习模型也被用于流数据。

比如在风控系统中,当我们计算好特征后,还需要把这些特征输入评分模型进行风险评分。根据不同的使用场景,使用的评分模型可能是基于规则的模型,也可能是基于机器学习的模型。传统的机器学习模型主要通过离线训练而来,但现在越来越多的模型会直接基于流数据在线训练和更新。

再比如在异常检测应用中,我们会在线统计并估计变量的分布参数,然后根据训练出的分布模型判断变量之后的取值是否属于异常。这种同时在线更新和预测的做法,在流计算应用中也越来越常见。

03 流数据状态和流信息状态

在流计算系统中,“状态”是非常重要的方面。甚至从各种开源流计算框架的发展历史来看,我们会发现大家对实时流计算中的“状态”问题也是一点点逐步才弄清楚的。

关联操作中临时保存的窗口数据、实现时间维度聚合特征、关联图谱特征、CEP中有限状态机、统计或机器学习模型的参数估计,实时流计算系统需要的最主要的几个计算目标,无不与“状态”有关。但,这些状态是有区别的!

我们将流在执行过程中涉及到的状态,分为两类:流数据状态流信息状态

  • 流数据状态。在流数据处理的过程中,可能需要处理事件窗口、时间乱序、多流关联等问题,在解决这些问题的过程中,通常会涉及到对部分流数据的临时缓存,并在处理完后将其清理。我们将临时保存的部分流数据称为“流数据状态”。

  • 流信息状态。在对流数据的分析过程中,会得到一些我们感兴趣的信息,比如时间维度的聚合数据、关联图谱中的一度关联节点数、CEP中的有限状态机等,这些信息可能会在后续的流数据分析过程中被继续使用,从而需要将这些信息保存下来。同时在后续的流数据处理过程中,这些信息还会被不断地访问和更新。我们将这些分析所得并保存下来的数据称为“流信息状态”。

将实时流计算应用中的状态分为了“流数据状态”和“流信息状态”。可以说是从两个不同的维度对“流”进行的管理。前者“流数据状态”是从“时间”角度对流进行管理,而后者“流信息状态”则是从“空间”角度对流的管理。

“流信息状态”弥补了“流数据状态”只是对事件在时间序列上做管理的不足,将流的状态扩展到了任意的空间。

目前,针对“流信息状态”的存储,主要有三种方式:

  • 计算节点和状态数据节点分离的分布式内存数据库方案

▲图3:使用Redis集群进行状态存储和管理

  • 计算节点和状态数据节点共存的分布式内存格点方案

▲图4:使用Ignite集群进行状态存储和管理

  • 基于分布式文件系统同步状态数据的方案

▲图5:基于分布式文件系统的状态存储和管理集群

将“流计算应用本身的执行过程”和“流数据的信息管理机制”解耦,这使得实时流计算系统的整体结构更加清晰。如果我们将前者理解为CPU的执行流水线,那么后者就相当于是内存。实时流计算系统的这种架构就非常像是一个分布式的JVM了!

04 流计算框架

目前的开源流计算框架有许多,比如Apache Storm、Spark Streaming、Apache Samza、Apache Flink、Akka Streaming、Apache Beam等。这些流计算框架各有特色,那我们该如何面对琳琅满目的流计算框架呢?可以从两个角度来看待这个问题。

从横向功能特征的角度来看,其实所有流计算框架的核心概念都是相同的。只要我们掌握了流计算中的核心概念,把握流计算框架中各种问题的关键所在,那么面对这些流计算框架,也不会感到眼花缭乱,乱了阵脚。

从纵向发展历史的角度来看,以Flink为代表的新一代流计算框架,在理论和实践上都已日趋完善和成熟。当掌握了流计算中的核心概念后,不妨一开始就站在Flink这个巨人的肩膀上,开始在流计算领域的探索和实践。

而作为有希望统一流计算领域的Apache Beam,实际上是构建在各种具体流计算框架上的更高一层统一编程模式,它对流计算中的各种概念和问题做出了总结,是我们追踪流计算领域最新进展的一个好切入点。

最后附上实时流计算系统思维导图(点击图片可放大):

作者简介:周爽,本硕毕业于华中科技大学,先后在华为2012实验室高斯部门和上海行邑信息科技有限公司工作。开发过实时分析型内存数据库RTANA、华为公有云RDS服务、移动反欺诈MoFA等产品。目前但任公司技术部架构师一职。著有《实时流计算系统设计与实现》一书。

(0)

相关推荐

  • 数据驱动的在线学习倦怠预警模型研究与实现

    导读 摘   要:在线学习倦怠是学习者由于学习压力等因素影响而产生的一种倾向于逃避学习的消极心理状态,对其进行有效识别与适时预警是实现高效在线学习的重要途径.鉴于此,文章首先确立了在线学习倦怠的内涵与 ...

  • 多目标跟踪:SORT和Deep SORT

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  • 亚马逊S3云存储平台的神秘面纱

    谈到云存储,第一个想到的一定是Amazon,也就是当初那个网上卖图书的亚马逊,.COM的先驱.AmazonS3是亚马逊06年推出的云存储服务. 亚马逊提供一种称为弹性云计算(Amazon EC2,Am ...

  • 一文详解分布式系统

    分布式系统,顾名思义,就是让多台服务器.多计算单元,协同来完成整体的计算任务.它拥有多种组织方式.在分布式系统中,使用分层模型,路由和代理计算任务.存储任务,将不同的工作,划分到不同业务集群机器中,是 ...

  • CTO问我Pulsar替代Kafka的实际意义是什么

    最近一年,Pulsar可谓出尽了风头.社区中一直在鼓吹Pulsar就是用来取代Apache Kafka的主宰地位的.Pulsar提供了一套兼容Kafka的API,让大数据工程师很丝滑不费力的从Kafk ...

  • 数据中台与传统大数据平台有什么区别?终于有人讲明白了

    大数据DT 提供大数据.AI等领域干货学习资源的「宝藏号」,跟50万技术人共同成长,一起玩转大数据.Python.数据分析.数据科学.人工智能!还会有各种好玩又奇葩的数据解读,边学习边吃瓜! 542篇 ...

  • 用U盘装系统这个技术活儿 终于有人讲明白了

    装系统已经成为小白入门必修课程了,如果你在网上搜索"U盘装系统",恐怕能搜出不下十几种方法,这些方法中会用到很多软件,甚至还要用到PE.Ghost程序,步骤比较繁琐,而且前期需要下 ...

  • 高镍正极材料匀浆为什么会产生胶凝,终于有人讲明白了

    [研究背景] 近年来,高镍正极材料作为新型正极材料被广泛用于电动汽车领域.尽管其能量密度较高,但表面残留锂化合物加剧了循环过程中气体的释放,显著增加了运行过程中电池破裂的风险.此外,残留锂的强碱性氢氧 ...

  • 锂离子电池极片易掉粉,终于有人讲明白了

    来源 | 顺锂成章 来源 | 锂电前沿 锂离子电池极片剥离强度是指极片活性物质与集流体粘附在一起的牢固程度,是极片的重要指标之一.对极片剥离强度的测试,可评估黏结剂的使用是否合理,以及合浆.涂布工序的 ...

  • 4种数据分析基础方法,终于有人讲明白了

    导读 提到数据分析的基础方法,大家肯定很容易想到对比.细分和趋势,但是这些都是非常基础的入门理论,本文不会涉及.本文主要介绍产品经理在管理整个项目.解决整个项目的问题的时候,需要用到的数据分析方法. ...

  • 6大人工智能应用关键技术,终于有人讲明白了

    导读:我国<人工智能标准化白皮书(2018年)>中也给出了人工智能的定义:"人工智能是利用数字计算机或者由数字计算机控制的机器,模拟.延伸和扩展人类的智能,感知环境.获取知识并使 ...

  • 集合竞价卖出技巧,终于有人讲明白了,5分钟学会一辈子受用

    大家最近比较喜欢在集合竞价的时候操作股票,买卖股票,那也是有人在集合竞价的时候卖掉手中的股票的,那怎么操作呢?那就来看一下小编为大家整理的是有关集合竞价时间能卖掉股票吗,集合竞价卖出技巧的内容吧! 1 ...

  • 什么是云原生,跟云计算有什么关系?终于有人讲明白了

    云技术 927篇原创内容 公众号 导读:云原生到底是什么? 作者:阿里集团 阿里云智能事业群 云原生应用平台 来源:大数据DT(ID:hzdashuju) 云原生(Cloud Native)的概念,最 ...

  • “私车公用”咋处理?涉及哪些税?如何筹划?终于有人讲明白了!

    "私车公用"是企业运营中的常见现象,而"私车公用"的财税处理又是财务人必须要掌握的知识点,这一篇文章看完,"私车公用"再也难不到你了. 老板 ...