微财基于 Flink 构造实时变量池

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 本文整理自微财资深数据开发工程师穆建魁老师在 Flink Forward Asia 2024 行业解决方案(一)专场中的分享。主要涵盖三部分内容:1) 基于 Flink 构建实时变量池,解决传统方案中数据库耦合度高、QPS 上限低等问题;2) 选择 Flink 进行流式计算的架构选型(Kappa 架构)及开发效率提升策略,通过数据分层优化开发流程;3) 实时变量池架构与多流关联优化实践,确保高效处理和存储实时变量,并应用于公司多个业务领域。

摘要:本文整理自微财资深数据开发工程师穆建魁老师在 Flink Forward Asia 2024 行业解决方案(一)专场中的分享。主要分为以下三个部分:

一、微财科技基于 Flink 构建时变量池分享

二、选择 Flink 进行流式计算的架构选型和开发效率提升策略

三、实时变量池架构与多流关联优化实践

一、微财科技基于 Flink 构建时变量池分享

img

本次分享的的主题是微财基于 Flink 构造实时变量池。首先,我简单的介绍一下我们的公司。微财科技是一家专注于互联网金融的公司,其核心业务是通过 APP为用户提供借款服务。当用户下载登录 APP 后申请借款时,系统会根据一套复杂的风险评估机制来决定是否批准该申请。这套风险评估机制主要依赖于两个关键组成部分:模型与策略。其中,变量作为这些模型和策略的重要输入数据,对于确保风险评估的准确性至关重要,从而直接影响到用户的借款申请能否获得批准。

img

什么是变量呢?简而言之,变量就是描述用户行为或属性的数据。例如,用户的年龄、性别以及收入水平等。在变量的众多分类中,有一类被称为实时变量,它指的是通过实时数据计算得出的变量。

img

为什么需要实时变量呢?或者在哪些场景下会需要实时变量呢?这里将通过公司两个简单的场景来为大家举例说明。首先,考虑一个 T0 的新用户,即一个在当天注册并完成进件流程的用户,他此时没有历史数据可供参考。因此,当这位用户发起借款请求时,我们需要对其进行风险评估,而这时只能依赖他的实时数据来进行评估。

在另外一个场景下,即老用户的 T0 变异情况。如果仅依赖用户 T-1的数据来对其进行风险评估,那么评估结果很可能是错误的,或者会导致误放的情况。在这种场景下,这样的评估结果对公司来说是无法接受的。因为这样的错误评估将直接导致公司的现金损失。

如何产出实时变量呢?或公司原先的计算方案,以及业内普遍采用的解决方案是什么?答案是通过即时计算,即请求来一条处理一条。每当有用户需要进行风险评估时,我们就会从数据库中提取与其相关的数据。获取到这些数据后,在代码层面进行加工和计算,最终将计算出的变量提供给风险评估系统,以便其进行风险评估。

img

这个方案存在以下几个痛点。首先,其 QPS 上限不高。随着用户量和业务量的增长, QPS 的压力会反向传导至前端的数据库组件,如 MySQL 和 MongoDB 。为了加速查询,就只能在原有的数据库组件上添加索引,而且这些索引只能添加在存库上,因为在主库上添加会影响线上业务的正常运行。然而,添加索引并非短时间内可以完成的任务。此外当存库发生故障需要新建时,代价非常高昂,会直接影响线上服务的SLA。在这种场景下,实时变量计算与数据库组件的耦合度非常高。

img

为了解决上述痛点,将决定采用 Flink 流式计算方案。在数据同步阶段,首先利用 Flink CDC 将数据采集到 ODS 层。随后,通过流式数据驱动下游的 Flink 任务来生成变量,并将这些最终变量写入一个 OLAP 引擎中。这样一来, QPS 的压力就主要集中在 OLAP 引擎上了。同时,由于采用了 Flink CDC 进行数据同步,因此不再依赖于原有的数据库索引。值得一提的是,自今年年初完成上云后, CDC 已经支持 GTID 同步。一旦数据库发生故障,便可以在云端迅速启动一个新实例,并从之前的 binlog 同步位置继续数据同步。这样我们就能完成和业务组件的解耦,显著提升整体变量 SLA 的稳定性。

二、选择 Flink 进行流式计算的架构选型和开发效率提升策略

img

在选定 Flink 作为公司的流式计算引擎之后,面临的首要问题是架构选型,这是一个需要仔细考量并编制具体场景的问题。 Lambda 和 Kappa 这两种架构各有其独特的优势和适用场景。当时选择 Kappa 架构而没有选择 Lambda 架构的关键原因在于, Lambda 架构本质上仍是一个离线加实时的解决方案。由于变量要求具有高度的准确性,即需要达到百分百精确一致,而 Lambda 架构无法有效解决这个问题。此外,如果采用 Lambda 架构,对于同一个变量,需要同时开发离线和实时两套系统,这无疑会降低开发效率。相比之下, Kappa 只需开发一套计算逻辑,因此相较于 Lambda 架构开发效率会有所提升。并且,随着 Flink 的快速迭代,可以利用 Flink 的 Exactly-Once 语义来严格保证变量的一致性。

img

在选择 Kappa 之后,又遇到了新的挑战,即开发效率的问题。这里所说的开发效率慢,并非指 Flink 本身运行缓慢,而是指相较于之前的批处理计算方式,采用 Kappa 架构后,开发流程受到了较大的影响。有人可能会说 Flink 的性能并不差,但问题在于 Flink 无法满足当前业务的特定需求。主要问题包括:一是快速迭代的风险变量更新过程中,使用Flink SQL无法有效从现有状态恢复;二是处理长时间跨度(如半年到一年)的用户行为数据时,多流关联操作容易导致状态膨胀。此外,虽然转向DataStream API可以解决部分问题,但这也增加了学习成本,尤其是对于习惯于Java开发的团队来说,需要额外掌握Flink的各种算子及其状态管理机制。该如何解决这个问题呢?是否存在一种方案,既能利用 Flink SQL 的快速开发能力,又能避免直接操作细粒度 state 所带来的问题呢?

img

解决方案是实施数据分层,因为数据分层对于数据开发人员来说通常比较熟悉。在变量计算层面,主要分为两层:变量原子层和完整变量计算层。在变量原子层,完全采用 DataStream API 的方式对数据进行清洗、加工,以及多流关联和数据打宽等操作。同时,针对不同的数据源严格控制其生命周期,以避免state 无限制地膨胀。在加工完变量原子层后,在上层进行变量计算时,便可以专注于变量的加工逻辑本身。这意味着即使需求快速迭代,也能利用 Flink SQL 快速完成变量的加工,迅速适应需求的变化。采用这种变量分层策略后,开发效率相较于以前的即使变量计算,我们的整体开发效率大约提升了 30% 。

三、实时变量池架构与多流关联优化实践

img

在提到使用 DataStream API 构建原子层时也涉及了多流关联的问题。这确实是实时开发中一个难以避免的挑战。多流关联的主要难题在于, Flink 仅提供了 connect API ,若要进行多流关联,可能会导致状态冗余。此外,使用 connect API 会使代码变得复杂且冗余,增加了维护难度。在优化多流关联的场景中经历了长时间的探索,并尝试了许多方法。最终通过使用 Union 加 keyBy 的方式,将多个流合并后,再进行状态管理,从而解决了大状态的问题。同时,由于我们在原子变量层严格控制了不同数据源的生命周期,帮助我们避免了大状态问题的出现。

img

这就是完整的变量池架构,在实时变量池完成变量的加工后,所有的变量都被存储到了 Doris 中。而选择 Doris 的原因在于,一些变量场景需要进行观察点的计算,比如计算用户从注册至今的天数。因此,在选择 OLAP 引擎时,除了要考虑其高并发点查能力外,还希望该引擎具备一定的 SQL 查询能力。为此在 OLAP 引擎外部还封装了一层查询接口,用于处理线上的实时查询请求,并将这些实时查询日志记录到Paimon中。

img

由于我们公司本身就是一家互联网金融公司,因此对数据的时效性和线上数据的质量要求都非常严格。在将线上查询日志记录到Paimon之后,通过离线任务设置了按小时级的定时调度。这一调度主要对线上变量调用的结果进行实时的质量监控。这里主要关注四个重要指标: PSI 、缺失率、均值以及方差。针对每个变量都设定了相应的告警阈值。一旦触发告警就能实时地通知相关人员。以下图表展示了我们线上的实时质量监控结果。

img

在这套实时变量架构落地之后,今年除了风险场景外,已经成功将应用场景极大地扩展到了公司的其他业务领域。目前,营销市场、客服部门,甚至财务部门都在使用这套实时变量来辅助业务决策。

img

在未来展望方面,目前使用的是自建的 Doris 作为线上的 OLAP 引擎。同时,我们也在积极接触阿里云上的云原生产品,如 StarRocks 和 SelectDB 。目前正在对这两个产品进行深度的测试,并期望将来 StarRocks 或 SelectDB 能够替代自建的 Doris ,以确保线上服务的稳定性。


更多内容


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc

相关文章
|
18天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171341 14
|
20天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150298 32
|
28天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201973 15
对话 | ECS如何构筑企业上云的第一道安全防线
|
6天前
|
机器学习/深度学习 自然语言处理 PyTorch
深入剖析Transformer架构中的多头注意力机制
多头注意力机制(Multi-Head Attention)是Transformer模型中的核心组件,通过并行运行多个独立的注意力机制,捕捉输入序列中不同子空间的语义关联。每个“头”独立处理Query、Key和Value矩阵,经过缩放点积注意力运算后,所有头的输出被拼接并通过线性层融合,最终生成更全面的表示。多头注意力不仅增强了模型对复杂依赖关系的理解,还在自然语言处理任务如机器翻译和阅读理解中表现出色。通过多头自注意力机制,模型在同一序列内部进行多角度的注意力计算,进一步提升了表达能力和泛化性能。
|
10天前
|
存储 人工智能 安全
对话|无影如何助力企业构建办公安全防护体系
阿里云无影助力企业构建办公安全防护体系
1256 11
|
12天前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
11天前
|
人工智能 自然语言处理 程序员
通义灵码2.0全新升级,AI程序员全面开放使用
通义灵码2.0来了,成为全球首个同时上线JetBrains和VSCode的AI 程序员产品!立即下载更新最新插件使用。
1427 25
|
11天前
|
消息中间件 人工智能 运维
1月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
839 41
1月更文特别场——寻找用云高手,分享云&AI实践
|
2天前
|
存储 人工智能 分布式计算
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
本文整理自阿里云产品经理李昊哲在Flink Forward Asia 2024流批一体专场的分享,涵盖实时湖仓发展趋势、基于Flink搭建流批一体实时湖仓及Materialized Table优化三方面。首先探讨了实时湖仓的发展趋势和背景,特别是阿里云在该领域的领导地位。接着介绍了Uniflow解决方案,通过Flink CDC、Paimon存储等技术实现低成本、高性能的流批一体处理。最后,重点讲解了Materialized Table如何简化用户操作,提升数据查询和补数体验,助力企业高效应对不同业务需求。
322 17
湖仓实时化升级 :Uniflow 构建流批一体实时湖仓
|
2天前
|
机器学习/深度学习 自然语言处理
Deepseek开源R1系列模型,纯RL助力推理能力大跃升!
近期Deepseek正式发布 DeepSeek-R1,并同步开源模型权重。DeepSeek-R1 遵循 MIT License,允许用户通过蒸馏技术借助 R1 训练其他模型。