本文为您介绍实时计算Flink版基本概念的常见问题。

什么是实时计算?

数据的业务价值会随着时间的流失而迅速降低,因此在数据发生后必须尽快对其进行计算和处理。目前,对于信息的高时效性和可操作性要求越来越高,这就要求软件系统能够在更短的时间内处理更多的数据。而传统的大数据处理模型将在线事务处理和离线分析从时序上完全分开,对于数据加工均遵循传统的日清日毕模式,即以小时甚至以天为计算周期对当前数据进行累计并处理。显然,传统的大数据处理方式无法满足数据实时计算的需求。数据处理时延造成的影响对要求苛刻的业务场景会非常明显,例如实时大数据分析、风控预警、实时预测和金融交易等领域。

实时计算可以有效地缩短全链路数据流时延、实时化计算业务逻辑、平摊计算成本,最终有效满足实时处理大数据的业务需求。

实时计算具备三大特点:
  • 实时(Realtime)且无界(Unbounded)的数据流

    实时计算面对的数据是实时且流式的,这些数据按照时间发生顺序被实时计算订阅和消费。例如网站的访问单击日志流,只要网站不关闭,其单击日志流将不停产生并进入实时计算系统。

  • 持续(Continous)且高效的计算

    实时计算是一种事件触发的计算模式,触发源为无界流式数据。一旦有新的流数据进入实时计算系统,它就立刻发起并进行一次计算任务,因此整个过程是持续进行的。

  • 流式(Streaming)且实时的数据集成

    被流数据触发的计算结果,可以被直接写入目的数据存储。例如将计算后的报表数据直接写入阿里云关系型数据库RDS(Relational Database Service)进行报表展示。因此流数据的计算结果可以同流式数据一样,持续被写入目的数据存储。

实时计算与批量计算相比存在哪些差异?

下面从用户和产品层面来理解两类计算方式的区别。
  • 批量计算
    批量计算是一种批量、高时延、主动发起的计算。目前绝大部分传统数据计算和数据分析服务均基于批量数据处理模型,即使用ETL系统或者OLTP系统进行构造数据存储,在线的数据服务(包括Ad-Hoc查询、DashBoard等)通过构造SQL语言访问上述数据存储并取得分析结果。这套数据处理的方法论伴随着关系型数据库在工业界的演进而被广泛采用。传统的批量数据处理模型如下图所示。批量计算模型
    传统的批量数据处理流程如下:
    1. 装载数据

      对于批量计算,用户需要预先将数据加载到计算系统,您可以使用ETL系统或者OLTP系统装载原始数据。系统将根据自己的存储和计算情况,对于装载的数据进行一系列查询优化、分析和计算。

    2. 提交请求
      系统主动发起一个计算作业(例如MaxCompute的SQL作业,或Hive的SQL作业)并向上述数据系统进行请求。此时计算系统开始调度(启动)计算节点进行大量数据计算,该过程的计算量可能非常大,耗时长达数分钟乃至于数小时。由于数据累计处理不及时,上述计算过程中可能就会存在一些历史数据,导致数据不新鲜。
      说明 您可以根据业务需要,随时调整SQL语句后,再次提交作业。您甚至可以使用AdHoc查询做到即时修改和即时查询。
    3. 返回结果

      计算作业完成后将数据以结果集形式返回给用户,由于保存在数据计算系统中的计算结果数据量巨大,需要用户再次集成数据到其他系统。一旦数据结果巨大,整体的数据集成过程就会漫长,耗时可能长达数分钟乃至于数小时。

  • 实时计算
    实时计算是一种持续、低时延、事件触发的计算作业。相对于批量计算,流式计算整体上还属于比较新颖的计算概念。由于当前实时计算的计算模型较为简单,所以在大部分大数据计算场景下,实时计算可以看做是批量计算的增值服务,实时计算更强调计算数据流和低时延。实时计算数据处理模型如下。流计算模型
    1. 实时数据流

      使用实时数据集成工具,将实时变化的数据传输到流式数据存储(例如消息队列、DataHub)。此时数据的传输实时化,将长时间累积的大量数据平摊到每个时间点,不停地小批量实时传输,因此数据集成的时延得以保证。

      源源不断的数据被写入流数据存储,不需要预先加载的过程。同时,流计算对于流式数据不提供存储服务,数据持续流动,在计算完成后就被立刻丢弃。

    2. 提交流式任务

      批量计算要等待数据集成全部就绪后才能启动计算作业,而流式计算作业是一种常驻计算服务。实时计算作业启动后,一旦有小批量数据进入流式数据存储,流计算会立刻计算并得出结果。同时,阿里云流计算还使用了增量计算模型,将大批量数据分批进行增量计算,进一步减少单次运算规模并有效降低整体运算时延。

      从用户角度,对于流式作业,必须预先定义计算逻辑,并提交到流式计算系统中。在整个运行期间,流计算作业逻辑不可更改。用户通过停止当前作业运行后再次提交作业,此时之前已经计算完成的数据是无法重新再次被计算。

    3. 实时结果流

      不同于批量计算,结果数据需等待数据计算结果完成后,批量将数据传输到在线系统。流式计算作业在每次小批量数据计算后,无需等待整体的数据计算结果,会立刻将数据结果投递到在线/批量系统,实现计算结果的实时化展现。

    使用实时计算的顺序如下:
    1. 提交实时计算作业。
    2. 等待流式数据触发实时计算作业。
    3. 计算结果持续不断对外写出。
计算模型差别对比,详情内容如下表所示。
对比指标 批量计算 实时计算
数据集成方式 预先加载数据。 实时加载数据到实时计算。
使用方式 业务逻辑可以修改,数据可重新计算。 业务逻辑一旦修改,之前的数据不可重新计算(流数据易逝性)。
数据范围 对加载的所有或大部分数据进行查询或处理。 对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理。
数据大小 大批量数据。 单条记录或几条记录的微批量数据。
性能 几分钟至几小时的延迟。 大约几秒或几毫秒的延迟。
分析 复杂分析。 简单的响应函数、聚合和滚动指标。

阿里云实时计算Flink版有哪些使用限制?

请您评估以下限制对您业务的影响,并做相应的调整。如有疑问,请您提交工单进行咨询。
  • 阿里云实时计算Flink版购买指导,请参见开通流程
  • 阿里云实时计算Flink版WebConsole仅支持Chrome浏览器访问。
  • 阿里云实时计算Flink版包年包月支持华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)、新加坡和中国(香港)地域,您可以按区域购买。
  • 阿里云实时计算Flink版按量付费支持华南1(深圳)、华北2(北京)、华东2(上海)和华东1(杭州)地域,您可以按区域购买。
  • 阿里云实时计算Flink版在简单的流式压测处理场景下(例如过滤、清洗等),一个实时计算CU的处理能力为1000条/秒。在复杂的流式压测处理场景下(例如复杂UDF计算、聚合操作等),一个实时计算CU的处理能力为500条/秒。
    说明 请根据您的业务情况,评估所需的CU数量。
  • 阿里云实时计算Flink版对整个下属的Task、Task版本、IDE打开Task页面均有不同限制,包括:
    • 一个阿里云账号至多可以创建20个项目空间。
    • 单个项目下最多允许创建100个文件夹,深度最大不超过5层。
    • 单个项目下最多允许上传50个UDF或JAR。
    • 单个文件夹内最大文件数为500,包含目录。

什么是流数据?

所有大数据的产生均可以看作是一系列离散事件,这些离散事件是一条条事件流或数据流。相对于离线数据,流数据的规模普遍较小。流数据是由数据源持续产生的数据,示例如下:
  • 使用移动或Web应用程序生成的日志文件。
  • 网购数据。
  • 游戏内玩家活动信息。
  • 社交网站信息。
  • 金融交易大厅或地理空间服务数据中心内所连接设备或仪器的遥测数据。
  • 地理空间服务信息。
  • 设备或仪器的遥测数据。

阿里云实时计算Flink版的数据存储有哪些类型?

阿里云实时计算Flink版本身不带有业务存储,所有的数据均是来自于外部存储系统持有的数据。阿里云实时计算Flink版支持以下几类数据存储类型:
  • 流式的数据输入:流式数据的输入会触发和推动实时计算Flink版进行数据处理。每个实时计算Flink版作业必须至少声明一个流式数据输入源。
  • 静态数据输入:静态数据输入也被称为维表,对于每条流式数据,可以关联一个外部静态数据源进行查询,为实时计算Flink版提供数据关联查询。
  • 结果表输出:实时计算Flink版将计算的结果数据写出到目的数据表,为下游数据继续消费提供各类读写接口。