大数据计算系统 Blink 在端侧的应用实践

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文主要介绍了端侧通过Blink任务对埋点数据进行实时聚合和清洗,解决端侧日志时效性问题,并基于实时日志搭建线上监控运维体系,从而提升端侧整体的稳定性。


Blink简介
介绍 Blink 前需要先认识下 Flink,其最初是柏林工业大学的一个研究性项目(StratoSphere),早期专注于批计算,于2014年捐赠给 Apache 并进行孵化,后逐渐演变为数据计算框和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 计算框架的核心是Flink Runtime 执行引擎,也是一个分布式系统,可运行在所有常见的集群环境中,它将大型计算任务分成许多小的部分每个机器执行一部分,以内存执行速度和任意规模来执行计算。而Blink 最初是阿里巴巴内部的 Flink 版本代号,是实时计算部门基于内部应用场景对 Flink 做了大量的优化和稳定性改造后的内部产品,在经过内部大规模应用和历年双11的实践与打磨,最终决定将其捐赠给 Flink 社区,成为 Flink 的一部分。值得一提的是,在大数据计算领域,批处理与流处理是两种常见的任务类型,常见的大数据处理框架只支持一种类型的任务,而 Flink 认为一切数据都是由流组成的,离线数据是有界限的流,实时数据是没有界限的流。基于其强大灵活的处理引擎,Flink 能够同时支持批处理和流处理两种应用场景:

  1. 有界数据:数据在指定的时间段内,是批处理的应用场景,需要对完整数据进行计算。类似的处理框架还有 Hadoop MapReduce、Hive等。
  2. 无界数据:数据没有时间的界限,所处理的数据是源源不断输入的,如消息队列、分布式日志这类流式数据源等。程序需要对传输的数据进行持续操作即实时计算。类似的处理框架还有 Storm、Spark Streaming等。




SQL API


Flink 提供了不同级别的编程模型供开发流/批处理程序使用。越往下越灵活,但编程复杂度也越高:

image.png

  1. Stateful Stream Process:状态化数据流的抽象接口,也是最底层的开发接口。该接口允许用户自由的处理来自一个或多个流中的事件,通过注册 Event Time 和 Processing Time 回调来实现复杂的计算。最终通过 ProcessFunction 集成到 DataStream API 中。
  2. DataStream(有界或无界数据流) / DataSet(有界数据集) API:为许多通用的流处理操作提供了处理原语,包括各种窗口、转换、连接、聚合、窗口、状态等,因此大部分应用程序从以此接口为基础进行开发



出于易用性的考虑,Blink 将 SQL / Table 作为其核心API,并对此进行了大量优化和重构工作(实际上 Flink SQL 绝大部分源自阿里巴巴的提交),实现了大部分 SQL 的功能,使其在使用上和标准 SQL 语法基本一致,在逻辑能力上和 DataStrem / DataSet API 相媲美,而表达上却更加简练。

image.png

image.png

当端上产生一条埋点数据后,UT 提供的端侧 SDK 会先将数据进行信息补全,通过加密压缩后先离线存储到本地,之后再配合一定的调度策略通过独立进程异步上翻到无线埋点网关Adash服务中。Adash在接收到上翻数据后会进行解压、解密、分流等操作,最终将数据作为 Blink 流处理任务的输入。面对集团整个无线端每秒数以亿计的实时数据输入,UT 中的 Blink 流处理任务会依据埋点的事件类型(如曝光事件、点击事件、自定义事件和性能数据)以及所属App(如淘宝、天猫、饿了么等)两个维度进行数据清洗分流,将对应App的所属事件类型定义在同一张动态表中,作为统一的实时日志公共层,以减少烟囱式开发,规范数据结构。然后各个业务线可以通过订阅的方式访问到公共层的动态表,此时可将其视为一张源表,通过自定义的 Blink SQL 开启新的实时处理任务,进而实现对端侧实时数据的再加工。依据上述原理,以笔者服务的天猫优品业务为例,我们通过 Blink 任务对接 UT 实时日志公共层,过滤出天猫优品App的实时日志,经过二次清洗加工后将处理所得的数据转存到阿里云日志服务上(SLS),利用这部分实时数据搭建起端侧的线上实时监控大盘和预警体系。假设所属UT的动态表名为 "s_ut",那么源表的定义大致如下:


CREATE TABLE s_ut (  filed1 VARCHAR COMMENT '字段1注释',  filed2 VARCHAR COMMENT '字段2注释',  ...) with (  type = 'ut',  topic = 's_ut',  filterList = 'app_bu=''TMYP''', -- 业务标记  nullValues = '\\N|',  maxFetchSize = '100');



可以看到整个定义语句和标准的 SQL DDL 语法基本类似,数据类型是保持了一致的。with 后面可以跟上各个数据源表所特有的配置字段,如这里的 maxFetchSize 表示一次从数据源中取出的数据条数。


同理目标表的定义大致如下:


CREATE TABLE sls_tmyp (  filed1 VARCHAR COMMENT '字段1注释',  filed2 VARCHAR COMMENT '字段2注释',  ...) WITH (  type = 'sls',  endPoint = '阿里云SLS服务地址',  project = 'SLS空间名',  logStore = 'SLS日志库名');


需要注意的是,Blink 本身不带有数据存储功能,这里的表创建仅是动态表、外部数据表的引用声明,用来描述所处理的数据的结构(字段)。



在定义好源表和目标表后,接下来就是数据处理过程。如之前介绍,Blink 支持标准的 DQL 语句,同时提供大量函数供数据处理使用:

  1. 窗口函数:如需统计每分钟接口调用成功率,可以通过定义一个窗口来收集1分钟内的数据,再对该窗口内的数据进行实时计算。
  2. 内置函数:包括字符串函数、数字函数、日期函数、逻辑函数、条件函数、表值函数、类型转换函数、聚合函数等。
  3. 自定义函数(UDF):如果上述函数无法满足需求,也可以通过编码方式进行扩展,实现自定义处理逻辑。


和标准 SQL 类似,Blink 也推荐通过创建视图(View)来辅助计算,使逻辑表达更清晰。

CREATE VIEW v_yp_api_rate ASSELECT  TUMBLE_END(时间字段, INTERVAL '1' MINUTE) as `time` -- 定义时间窗口,接下来的数据都是在该时间窗口内的
  -- 支持 + - * / 操作,如计算接口成功率可通过 sum(成功数) / sum(调用总数) 实现。  ...FROM  s_utWHERE  os = 'android'  -- 如过滤出Android设备的数据


经过各种过滤和函数处理后得到的结果集可以通过 INSERT 语句将数据插入到最终的目标表中,大致编码如下:

INSERT  INTO sls_tmypSELECT  字段1,  字段2,  ...FROM  v_yp_api_rate;


如此我们就得到端上分钟级的接口成功率数据,回顾整个流式处理任务过程和普通 SQL 操作相差无几,基本没有太高的开发门槛。通常端上所涉及的数据包括:

  1. 网络侧:接口成功率、耗时、失败原因;WebView 资源下载次数(缓存利用率)等;
  2. 容器侧:H5 页面加载时长、曝光次数、加载失败(证书错误、HTTP错误)、页面降级、Hybrid 接口调用等;
  3. 性能侧:CPU、内存状况;网络断连;关键场景耗时统计等。


由此基本囊括了端侧所面对的核心应用场景,通过将数据导入到报表系统中,能够可视化的观察各个场景的变化情况。同时还可以针对核心数据指标设置阈值进行环比,能够很明显的察觉到线上的异常波动。配合钉钉、邮件、短信等推送工具,可以及时将发现的问题告知到相关负责人进行排查处理。前后的整体联动,仿佛为我们开启了上帝视角,整个流程体系也成为端侧稳定性保障的基石。

image.png


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
11天前
|
SQL 分布式计算 运维
如何对付一个耗时6h+的ODPS任务:慢节点优化实践
本文描述了大数据处理任务(特别是涉及大量JOIN操作的任务)中遇到的性能瓶颈问题及其优化过程。
|
25天前
|
数据采集 存储 数据处理
数据平台问题之知识管理系统的效果如何评估
数据平台问题之知识管理系统的效果如何评估
|
20天前
|
分布式计算 DataWorks 关系型数据库
MaxCompute 生态系统中的数据集成工具
【8月更文第31天】在大数据时代,数据集成对于构建高效的数据处理流水线至关重要。阿里云的 MaxCompute 是一个用于处理大规模数据集的服务平台,它提供了强大的计算能力和丰富的生态系统工具来帮助用户管理和处理数据。本文将详细介绍如何使用 DataWorks 这样的工具将 MaxCompute 整合到整个数据处理流程中,以便更有效地管理数据生命周期。
39 0
|
17天前
|
机器学习/深度学习 数据可视化 大数据
阿里云大数据的应用示例
阿里云大数据应用平台为企业提供高效数据处理与业务洞察工具,涵盖Quick BI、DataV及PAI等核心产品。DT203课程通过实践教学,帮助学员掌握数据可视化、报表设计及机器学习分析技能,提升数据驱动决策能力。Quick BI简化复杂数据分析,DataV打造震撼可视化大屏,PAI支持全面的数据挖掘与算法应用。课程面向CSP、ISV及数据工程师等专业人士,为期两天,结合面授与实验,助力企业加速数字化转型。完成课程后,学员将熟练使用阿里云工具进行数据处理与分析。[了解更多](https://edu.aliyun.com/training/DT203)
|
19天前
|
消息中间件 SQL 大数据
Hologres 在大数据实时处理中的应用
【9月更文第1天】随着大数据技术的发展,实时数据处理成为企业获取竞争优势的关键。传统的批处理框架虽然在处理大量历史数据时表现出色,但在应对实时数据流时却显得力不从心。阿里云的 Hologres 是一款全托管、实时的交互式分析服务,它不仅支持 SQL 查询,还能够与 Kafka、MaxCompute 等多种数据源无缝对接,非常适合于实时数据处理和分析。
54 2
|
26天前
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
27天前
|
分布式计算 搜索推荐 物联网
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
|
27天前
|
人工智能 分布式计算 架构师
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
大数据及AI典型场景实践问题之基于MaxCompute构建Noxmobi全球化精准营销系统如何解决
|
28天前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
20天前
|
存储 SQL 分布式计算
MaxCompute 在大规模数据仓库中的应用
【8月更文第31天】随着大数据时代的到来,企业面临着海量数据的存储、处理和分析挑战。传统的数据仓库解决方案在面对PB级甚至EB级的数据规模时,往往显得力不从心。阿里云的 MaxCompute(原名 ODPS)是一个专为大规模数据处理设计的服务平台,它提供了强大的数据存储和计算能力,非常适合构建和管理大型数据仓库。本文将探讨 MaxCompute 在大规模数据仓库中的应用,并展示其相对于传统数据仓库的优势。
52 0

热门文章

最新文章