流计算产品预研

来源:互联网 发布:vb进度条控件使用 编辑:程序博客网 时间:2024/06/05 09:29

国内各大云平台现有流计算产品预研

阿里云

  Alibaba Cloud StreamCompute(阿里云流计算)是运行在阿里云平台上的流式大数据分析平台,提供给用户在云上进行流式数据实时化分析工具。使用阿里云StreamSQL,用户可以轻松搭建自己的流式数据分析和计算服务,彻底规避掉底层流式处理逻辑的繁杂重复开发工作,属于阿里云的大数据基础服务,目前正在公测中。

产品特点

  • 开发门槛低

      无需用户在流计算框架上进行代码编程以及相关工作,提供了SQL语义的流式数据分析能力(StreamSQL)降低使用门槛

  • 性能优越、功能强大

      关键性能指标超越Storm的6到8倍,数据计算延迟优化到秒级乃至亚秒级,单个作业吞吐量可达百万(记录/秒)级别,单集群规模在数千台;实现exactly once语义

  • 全链路生态

      阿里云提供了全链路流计算开发平台,涵盖从数据采集到数据生产的各个环节,深度整合各类云数据存储,包括DataHub、日志服务(SLS)、RDS、OTS、ADS、IOTHub等各类数据存储系统,无需额外的数据集成工作,阿里云流计算可以直接读写上述产品数据

  • 运维监控快捷简单

      阿里云流计算是完全托管的流式计算引擎,用户隔离、一键式启用、天然集成了数据开发、数据运维、监控预警等服务

产品定位

阿里云流计算提供类标准的StreamSQL语义协助用户简单轻松的完成流式计算逻辑的处理。同时,受限于SQL代码功能有限,无法满足某些特定场景的业务需求,阿里云流计算同时为部分授信用户提供全功能的UDF函数。用户使用StreamSQL+UDF可完成大部分流式数据处理分析逻辑,目前流计算更擅长于做流式数据分析、统计、处理,对于非SQL能够解决的领域,例如复杂的迭代数据处理、复杂的规则引擎告警则不适合用现有的流计算产品去解决。

目前流计算擅长解决的几个领域的应用场景:

  • 实时网络点击PV、UV统计
  • 统计交通卡口的平均5分钟通过车流量
  • 水利大坝的压力数据统计和展现
  • 网络支付涉及金融盗窃固定行为规则的告警

曾经阿里云流计算对接,但发现无法满足的情况:

  • Oracle存储过程用阿里云流计算替换
  • 现有的Spark作业无缝迁移到流计算
  • 多种复杂规则引擎告警

最适用于简单编写流计算SQL即可完成自身流式数据分析业务的场景

全链路计算

  不同于现有的离线/批量计算模型(和批量计算差异性在下一小节细述),流计算全链路整体上更加强调数据的实时性,包括数据实时采集、数据实时计算、数据实时集成。三大类数据的实时处理逻辑在全链路上保证了流式计算的低时延。全链路流计算示意图如下:


这里写图片描述

  • 数据采集 用户使用流式数据采集工具将数据流式且实时地采集并传输到大数据消息Pub/Sub系统,该系统将为下游流计算提供源源不断的事件源去触发流式计算作业的运行。

  • 流式计算 流数据作为流计算的触发源驱动流计算运行。因此,一个流计算作业必须至少使用一个流数据作为源。一批进入的数据流将直接触发下游流计算的一次流式计算处理。

  • 数据集成 流计算将计算的结果数据直接写入目的数据存储,这其中包括多种数据存储,包括数据存储系统、消息投递系统,甚至直接对接业务规则告警系统发出告警信息。不同于批量计算(例如阿里云MaxCompute或者开源Hadoop),流计算天生自带数据集成模块,可以将结果数据直接写入到目的数据存储

  • 数据消费 流计算一旦将结果数据投递到目的数据源后,后续的数据消费从系统划分来说,和流计算已经完全解耦。用户可以使用数据存储系统访问数据,使用消息投递系统进行信息接收,或者直接使用告警系统进行告警。

业务流程

阿里云流计算全流程系统架构情况如下图所示。


这里写图片描述

  1. 数据采集 广义的实时数据采集指: 用户使用流式数据采集工具将数据流式且实时地采集并传输到大数据Pub/Sub系统,该系统将为下游流计算提供源源不断的事件源去触发流式计算作业的运行。阿里云大数据生态中提供了诸多针对不同场景领域的流式数据Pub/Sub系统,阿里云流计算天然集成上图中诸多Pub/Sub系统,以方便用户可以轻松集成各类流式数据存储系统。例如用户可以直接使用流计算对接SLS的LogHub系统,以做到快速集成并使用 ECS 日志。

  2. 流式计算 流数据作为流计算的触发源驱动流计算运行。因此,一个流计算作业必须至少使用一个流数据作为数据源头。同时,对于一些业务较为复杂的场景,流计算还支持和静态数据存储进行关联查询。例如针对每条DataHub流式数据,流计算将根据流式数据的主键和RDS中数据进行关联查询(即join查询);同时,阿里云流计算还支持针对多条数据流进行关联操作,StreamSQL支持阿里集团量级的复杂业务也不在话下。

  3. 实时数据集成 为尽可能减少数据处理时延,同时减少数据链路复杂度。阿里云流计算将计算的结果数据可不经其他过程直接写入目的数据存储,从而最大程度降低全链路数据时延,保证数据加工的新鲜度。为了打通阿里云生态,阿里云流计算天然集成了OLTP(RDS产品线等)、NoSQL(OTS等)、OLAP(ADS等)、MessageQueue(DataHub、ONS等)、MassiveStorage(OSS、MaxCompute等)。

  4. 数据消费 流式计算的结果数据进入各类数据存储后,用户可以使用各类个性化的应用消费结果数据: 用户可以使用数据存储系统访问数据,使用消息投递系统进行信息接收,或者直接使用告警系统进行告警。

附: 数据链路情况

对于上图的数据链路,部分数据存储由于和流计算模型不能一一匹配,需要使用其他类型的流数据做中转,说明如下:

  • DataHub

      DataHub提供了多类数据(包括日志、数据库BinLog、IoT数据流等等)从其他数据存储上传到DataHub的工具、界面,以及和一些开源、商业软件的集成,参看《DataHub相关介绍文档》,即可获取丰富多样的数据采集工具。

  • 日志服务(LogService)

  LogService是针对日志类数据一站式服务,在阿里巴巴集团经历大量大数据场景锤炼而成。LogService提供了诸多的针对日志的采集、消费、投递、查询分析等功能。

  • 物联网套件(IoTHub)

      物联网套件是阿里云专门为物联网领域的开发人员推出的,其目的是帮助开发者搭建安全性能强大的数据通道,方便终端(如传感器、执行器、嵌入式设备或智能家电等等)和云端的双向通信。

      使用IotHub 规则引擎可以将IoT数据方便投递到DataHub,并利用流计算和MaxCompute进行数据加工计算。查看《IoT规则引擎使用》以查看如何将IoT数据推送到DataHub。

  • 数据传输(DTS)

      DTS支持以数据库为核心的结构化存储产品之间的数据传输。 它是一种集数据迁移、数据订阅及数据实时同步于一体的数据传输服务。使用DTS的数据传输功能,可以方便的将RDS等BinLog解析并投递到DataHub,并利用流计算和MaxCompute进行数据加工计算。

  • Message Service

      阿里云消息服务阿里云商用的消息中间件服务,具有大规模,高可靠、高并发访问和超强消息堆积能力的特点。流计算可以直接从消息服务读取流式数据。阿里云流计算对接消息服务当前仍在开发中。

  • MQ

      阿里云MQ服务是企业级互联网架构的核心产品,基于高可用分布式集群技术,搭建了包括发布订阅、消息轨迹、资源统计、定时(延时)、监控报警等一套完整的消息云服务。阿里云流计算对接ONS服务当前仍在开发中。

主要概念

阿里云流计算处理的数据来自哪里?如何加载数据到流计算;流计算处理后的结果数据如何继续应用?

阿里云流计算本身不带有业务存储,所有的数据均是来自于外部周边阿里云提供的存储系统持有的数据。目前阿里云支持几类数据存储类型:

  • 流式的数据输入: 为下游流式计算提供流式数据输入,是流计算进行数据处理的数据触发机制,推动流计算持续进行数据计算。每个流计算作业必须至少声明一个流式数据输入源。

  • 静态数据输入: 静态存储为流计算提供了数据关联查询,对于每条流式数据,可以关联外部一个静态数据源进行查询。因此,静态数据输入也被成为维表。

  • 结果表输出: 流计算将计算的结果数据写出到目的数据表,为下游数据继续消费提供各类读写接口。

阿里云流计算支持哪几个流式数据输入?维表输入?结果表输出?

目前支持流式输入表有:

  • 大数据总线(DataHub)

  • 日志服务(LogService)

支持静态输入表有:

  • 表格存储(TableStore)

  • 云数据库(RDS)

  • 分布式数据库(DRDS)

支持输出表有:

  • 大数据总线(DataHub)

  • 日志服务(LogService)

  • 消息服务(MessageService)

  • 分析型数据库(AnalyticDB)

  • 表格存储(TableStore)

  • 云数据库(RDS)

  • 分布式数据库(DRDS)

阿里云流计算提供的编程接口是什么?如何编写流式数据处理逻辑?

阿里云流计算提供StreamSQL编写业务逻辑,为流式数据分析定制多种数据处理函数和操作符。以Word Count统计为例,下面给出一个具体的SQL例子:

-- 声明一个流式源表create stream table stream_source(word string) ;-- 声明一个目标表create result table stream_result(word string, cnt bigint) ;--统计word次数insert into stream_result select   t.word   ,count(1)from stream_source t  group by t.word;

单个阿里云流计算作业包含几个部分?

一个静态的流计算作业目前分为几大类静态信息,包括:

  • 代码: SQL代码,用户编写的业务逻辑,流计算作业核心逻辑,其中包括 输入表DDL声明(分为流式输入表、静态输入表)、输出表DDL声明,以及执行业务逻辑的DML。

  • 参数: 参数用来描述作业运行时指标,例如并发量、批处理数据量等信息。

  • 属性: 作业的业务信息,例如创建人、创建时间等相关记录。

我存放的数据不在上述支持的存储列表,如何处理?

如果您所选择的阿里云存储产品不在我们系统支持范围之内,请提交工单告之我们。如果您使用了自建开源存储,需要您将您的数据转移到上述支持的列表存储中。您需要自己搭建相关的转换常驻程序完成上述转换逻辑,例如当前流计算流式数据源输入暂时还不支持阿里云消息服务,那么用户可以选择写应用程序将消息服务中的数据转换为DataHub,再交由流计算读取DataHub进行处理。

华为云

  实时流计算服务(Cloud Stream Service,简称CS),是运行在华为云上的实时流式大数据分析服务,全托管的方式使用户无需感知计算集群,只需聚焦于Stream SQL业务,即时执行作业,完全兼容Apache Flink API。

  Cloud Stream实时流计算平台是华为公司在IT领域主推的低时延(ms级时延)、高吞吐、高可靠的分布式实时流计算服务。它以Flink为基础,加入华为沉淀的增强特性和安全增强,是一个批流合一的分布式计算服务,提供了数据处理所必须的丰富Stream SQL特性,后续还会支持在Stream SQL上增加机器学习和图计算相关算法的功能,适用于实时性要求高、吞吐量大的业务场景。

特点和优势

  • 丰富的Stream SQL在线分析能力

      支持window、join等聚合函数,用SQL表达业务逻辑,简便快捷实现业务。

  • 分布式实时计算

      支持大规模集群计算,集群弹性伸缩,最大化节省成本。

  • 易用

      在SQL编辑平台写Stream SQL,Stream SQL定义数据流入、数据处理、数据流出,快速便捷实现业务逻辑,降低流数据分析门槛。

  • 全托管

      用户完全不感知计算集群,对运行的作业可视化查看运行状态。

  • 开箱即用

      不再关心各种大数据框架,写StreamSQL,即时运行作业。

  • 安全隔离

      租户三重安全机制保障,确保作业安全运行,且租户计算集群完全和其他租户物理隔离,独立的安防设置,确保计算集群的安全性。

  • 高吞吐低时延

      从DIS中读取数据,服务支持自然反压机制,支持高吞吐压力;毫秒级延迟,满足实时计算的业务场景。

产品架构


这里写图片描述

  在实时业务架构中,流计算服务使用DIS服务作为数据源,用户在流计算服务中提交StreamSQL作为数据处理逻辑,处理结果输出到持久化数据存储,以供下游业务使用。

  • Source数据源

      从DIS服务中读取数据

  • 流式计算

      提供Stream SQLFlink API两种能力,上手成本最低,使用简便

  • Sink数据输出

      分析的结果数据,实时写入DIS(数据接入服务)/ OBS(对象存储服务)等服务,以供下游业务使用

应用场景

  Cloud Stream服务的使用,聚焦于互联网和物联网场景,适用于实时性要求高、吞吐量大的业务场景。主要应用在互联网行业中小企业/物联网/车联网/金融反欺诈等多种行业应用场景,如,互联网汽车、日志在线分析、在线机器学习、在线图计算、在线推荐算法应用等。

  • 实时流分析场景

      应用:实时大数据分析。

      场景特点:面向流数据,支持window、CEP、Join等复杂的流分析操作,毫秒级延迟。

      适用场景:在线分析,金融风控,交通流量分析,ETL,实时决策。

  • 物联网IOT场景

      应用:物联网在线数据分析。

      场景特点:物联网IoT直接调用Cloud Stream服务API,Cloud Stream可以实时读取传感器信息并执行用户的分析逻辑,分析结果对接到DIS、RDS等服务用于可视化、持久化、告警或报表展示。

      适用场景:电梯IoT、工业IoT、共享单车、互联网汽车和智能家居。

上下游数据

  • 数据接入服务(DIS)

      数据接入服务(DIS)是Cloud Stream的数据源和作业输出数据的存储地。

    1. 数据源:DIS接入用户数据,Cloud Stream从DIS读取数据,作为作业的输入数据。
    2. 数据的存储地:Cloud Stream将作业的输出数据写入DIS。
    3. 对象存储服务(Object Storage Service)

  • 对象存储服务(OBS)

      可用作CloudStream的数据源和作业Checkpoint数据的备份地。

    1. 数据源:Cloud Stream支持从OBS上读取用户存储的数据,作为作业的输入数据。

    2. 作业Checkpoint数据的备份地:如果作业开启了Checkpoint功能,Cloud Stream支持将作业快照存储到OBS中,以便作业在出现异常时可以从Checkpoint(一致性检查点)恢复作业。

  • 关系型数据库(Relational Database Service)

      关系型数据库(RDS)用于存储Cloud Stream作业输出的结果数据。

  • 与统一身份认证服务的关系

      统一身份认证服务(Identity and Access Management,简称IAM)为Cloud Stream提供了鉴权功能。

  • 云审计服务(Cloud Trace Service)

      云审计服务(CTS)为用户提供Cloud Stream的操作记录,供用户查询、审计和回溯使用。

注意:

  Cloud Stream支持从DIS上读取编码格式为csv或json格式的数据。

  Cloud Stream只支持从OBS上存放和读取csv格式的数据。

代码实例

创建作业并提交

使用实时流计算服务,首先要创建一个作业,如“JobSample”。

登录Cloud Stream管理控制台。

在Cloud Stream管理控制台的左侧导航栏中,单击“作业管理”,进入“作业管理”页面。

单击“新建”,弹出“新建作业”页面。

输入“作业名称”和“作业描述”,例如:作业名称为“JobSample”,作业描述为“This is a job sample.”。

在“作业模板”下拉框中,选择“默认”,使用系统默认的作业模板。

单击“确定”,进入“作业编辑”页面,在SQL语句编辑区域中会显示“默认”作业模板的SQL语句。

在SQL语句编辑区域中,根据作业的实际需要,编辑SQL语句。例如:

/** 创建输入流,从DIS的dis-source-stream通道获取数据,数据编码格式为CSV,分隔符为逗号 **/create source stream stream_source (  name STRING,  v2 STRING,  time LONG) WITH (  type = "dis",  region = "cn-north-1",  channel = "dis-source-stream",  partitionCnt = "3",  encode = "csv",  fieldDelimiter = ",") timestamp by proctime.proctime;/** 创建输出流,结果输出到DIS的dis-sink-stream1通道,若通道有多个partition,以name作为key 派发,输出格式为json,    enableOutputnull为false表示当属性为null时,该属性不进行输出 **/create sink stream stream_sink (  name STRING,  v2 STRING) WITH (  type="dis",  region="cn-north-1",  channel = "dis-sink-stream1",  partitionKey = "name",  encode = "json",  enableOutputnull = "false");/** 创建输出流,结果输出到DIS的dis-sink-stream2通道,若通道有多个partition,以name作为key 派发,输出格式为csv **/create sink stream stream_sink2 (  name STRING,  cnt BIGINT) WITH (  type="dis",  region="cn-north-1",  channel = "dis-sink-stream2",  partitionKey = "name",  encode = "csv",  fieldDelimiter = ",");/** 直接将入流 stream_source 输出到 stream_sink **/insert into stream_sink select name, v2 from stream_source;/** 计算从运行开始流进来的事件个数 **/insert into stream_sink2select name, count(v2) OVER (ORDER BY proctime RANGE UNBOUNDED preceding) as cnt1from stream_source;

单击“语义校验”,确保语义校验成功。

在“作业编辑”页面的右侧“运行参数设置”页签,使用默认运行参数即可。

单击“保存”。

单击“提交”,将作业发布线上。

百度云

无流计算产品

腾讯云

大数据处理套件TBDS

  腾讯大数据处理套件(Tencent Big Data Suite)是基于腾讯多年海量数据处理经验,对外提供的可靠、安全、易用的大数据处理平台。您可以按需部署大数据处理服务实现数据处理需求,例如报表展示,数据提取、分析,客户画像等大数据应用。该平台中集成了流式计算

  • 实时流处理计算

      灵活:支持 TStorm(用 Java 语言重写的 Storm 流处理引擎)、Storm 流式任务作业引擎,覆盖实时要求极高的流式作业场景;支持基于 Spark 上的 Spark Streaming,满足毫秒级的实时计算场景需求,如实时推荐、用户行为分析等。

网易蜂巢

无流计算产品

总结

  1. 从国内各大厂家的云计算产品综合比较来看,流计算平台仍然处于起步阶段,相对来说最为成熟完善的阿里云流计算平台也是处于公测中,还有许多根本就没有流计算平台产品推出。

  2. 阿里云流计算平台技术最成熟、架构最为完善、业务场景丰富、用户相对较多

  3. 华为流计算平台与阿里云流计算平台在各方面都较为类似,但是华为的不够成熟、不够规范、架构脉络不清晰、相关资料较少、还处于起步阶段

  4. 腾讯云将流计算集成在大数据开发套件之中,相关资料太少,只知道底层引擎采用的是腾讯自己用java重写的TStrom,另外支持SparkStreaming

  5. 阿里云之前的流计算平台底层引擎采用的是阿里自己改写的Storm(JStorm),最新版本的话与华为一样,底层引擎都选用的是Flink,可见未来的流计算引擎的趋势应该是Flink

原创粉丝点击