(来源:华为计算)
鲲鹏OmniStream引擎正式开源,将全Native化流计算引擎融入Flink生态,实现 Flink SQL执行效率平均提升100%+,DataStream执行效率提升30%+。开发者升级现有集群即可“开箱即用”,无需改造业务代码,让实时计算性能实现倍级跃迁。
挑战:Flink性能瓶颈与Native引擎的破局
在实时计算领域,Flink已成为流处理的事实标准,广泛应用于多个核心业务场景。在电商行业,Flink驱动实时个性化推荐系统,处理用户点击流和浏览行为,实现"千人千面"的商品推荐;在物联网领域,它实时分析设备传感器数据,实现预测性维护和智能质量控制;在金融行业,Flink支撑毫秒级的交易监控和反欺诈系统,保障资金安全;在实时数据仓库建设中,它替代传统的T+1离线架构,实现数据的实时同步与ETL处理。
然而,尽管Flink技术成熟,其基于Java的运行时引擎在超大规模数据处理中面临核心瓶颈:
行式计算效率低:原生Flink逐条处理数据,序列化/反序列化开销占用CPU资源高;
内存访问碎片化:行式存储导致CPU缓存命中率下降,无法发挥多核并行优势;
状态管理延迟高:TB级状态访问易引发性能抖动,影响业务实时性。
这些瓶颈使得企业在处理海量实时数据时面临吞吐量受限、延迟过高和成本激增的挑战,难以满足业务对实时性要求的不断提升。特别是在需要毫秒级响应的金融风控、需要处理亿级用户行为的电商平台、以及需要实时监控数万传感器的智能制造场景中,这些瓶颈直接影响了业务的实时性和可靠性。
为了应对上述挑战,OmniStream对Flink引擎进行Native化改造,结合向量化技术,助力实时计算加速。
OmniSteam:
向量化加速Flink,实现吞吐跃升
OmniStream整体架构主要分为Adaptor适配层、Native Framework层和Native算子层三部分。
Adaptor适配层主要负责Flink原生Java Runtime和Native Runtime的对接。用户提交任务后,Flink会生成执行计划等关键任务信息,Adaptor层会对任务信息进行重组,并生成Native的执行计划。在这个过程中,Adaptor层提供了完整的Fall Back机制判断任务是否属于Native支持的场景,如果支持,则生成完整的C++向量化执行计划,并将任务推送至Native Runtime执行;否则,则回退至原生Java Runtime执行。
Native Framework实现了一套完整的Native Runtime。上游Adaptor适配层将任务推送至Native Runtime,Native Framework会对任务信息进行解析并生成Native的执行计划,生成对应的Native Task和Native Operator。同时,Native Framework也实现了Native TaskManager、Native Partition Manager、Native Data Transfer、Native Timers、Native Backend Interface等,以保证Native Runtime的完整性,避免与Java Runtime频繁交互导致大额JNI开销。
Native TaskManager:实现Native任务的创建与调度。
Native Partition Manager:多并行度进行数据处理时,根据规则将数据分区,保证相同Native算子的不同线程正确接收数据。
Native Data Transfer:负责上下游Native算子链间的数据传输,支持Local模式(本地传输)和Remote模式(网络传输)。
Native Timers:提供Native定时器服务,支持事件时间和处理时间的定时器注册、触发和管理功能。
Native Backend Interface:提供统一的Native状态后端接口,对接不同的Native状态后端,以实现Native状态存储管理。
此外,值得注意的是,对于SQL任务,数据在Native Framework中以列式数据结构进行流转,OmniStream利用Flink的数据积攒机制,将一个批次内的数据转换为向量化的列式数据,向量化Native算子实现对列式数据的高效处理,从而提升整体流式数据处理性能。
而在DataStream场景,用户提交的任务一般包含灵活且复杂的用户自定义函数(User-Define Function,UDF),如何处理这部分UDF成为Native引擎一个新的挑战。为此,OmniStream集成了UDF Native对等翻译机制,基于编译器思想,将UDF JVM字节码翻译为Jimple IR,再进一步翻译为C/C++代码,实现Java代码到C++代码的无缝迁移,从而实现Native引擎对UDF的支持。
向量化Native算子层实现了列式向量化流计算。OmniStream基于C++语言实现了向量化算子,并且支持了多种内置数据类型、加减乘除等基本运算和多种内置函数。对于DataStream任务,由于处理对象一般为复杂的Object类对象,OmniStream基于C++完成了DataStream算子的Native化。对于SQL任务,数据以批量列式的形式流入SQL算子内部,并采用向量化模式进行运算,再将结果以批量列式的形式送往下游。
OmniStream性能实测
Flink SQL Nexmark性能平均提升100%+
Flink DataStream性能提升30%+
性能测试使用开源的Nexmark作为标准性能测试工具。Nexmark是业界公认的流计算性能测试工具。测试主要对比了Flink1.16.3开源版本和OmniStream的性能。测试环境均基于鲲鹏『服务器』,并在docker容器中进行一亿条数据量测试,测试结果显示,Nexmark性能平均提升100%+。DataStream用例为真实场景用例,执行效率提升30%+。
赋能多场景
以极致性能与可靠性重塑实时计算
金融科技与风险控制——在数据洪流中构筑实时风控防线
金融行业对实时性、准确性和可靠性有着极致要求。OmniStream的Native化执行和高效状态管理使其能够从容应对每秒数百万笔的交易流水。在反欺诈场景中,它能够实时关联分析用户的交易行为、设备信息、地理位置等多维度数据流,在毫秒级内精准识别并拦截欺诈交易,直接为企业避免资金损失。同时,在实时征信、异常监控(如防止钓鱼攻击)和风险价值(VaR)计算等场景中,OmniStream 也能提供稳定而强劲的算力支撑,为金融机构的核心风控系统提供可靠保障,确保业务安全与合规。
电商实时个性化推荐——让每一次点击都转化为实时洞察与行动
在传统架构下,电商平台的推荐系统通常存在分钟级的延迟,导致用户看到的推荐商品是基于其几分钟前的行为,无法捕捉其瞬时的兴趣变化。OmniStream凭借其向量化计算和超低延迟的特性,能够毫秒级地处理用户最新的点击与浏览行为,并立即更新推荐模型。这使得用户在当前页面下滑时,看到的推荐列表已经根据其刚刚看过的商品进行了实时调整,真正实现了“所思即所得”,从而显著提升点击率与转化率。
贡献和合作
OmniStream现已开源,诚邀全球开发者一起加入OmniStream的开源建设!您的每一行代码都在推动技术演进——无论是架构优化、缺陷修复还是创新特性开发,都将成为重塑实时计算生态的关键力量。
🚀立即参与开源
▸Gitee仓库:
https://gitee.com/openeuler/OmniAdaptor
https://gitee.com/openeuler/OmniStream
▸技术白皮书:
https://www.hikunpeng.com/document/detail/zh/kunpengbds/appAccelFeatures/sqlqueryaccelf/kunpengbds_omniruntime_20_0903.html