---
title: OmniRuntime OmniStream Flink Native化
description: "Apache Flink是一个开源的实时流处理引擎，适用于实时数据处理。随着业务的快速发展和数据量的急剧增长，在某些高负载场景下，Flink性能瓶颈逐渐显现，尤其是在互联网场景下，处理性能存在挑战。OmniStream Flink Native化特性是一种采用Native Code（C/C++）实现算子来提高查询性能的特性，主要分为Java实现的Java Adapter适配层和C++实现的CPP Core核心层。Java Adapter适配层主要用于生成Native的执行计划和不支持的场景回退Java Runtime。CPP Core核心层主要是实现各算子逻辑、数据传输及Checkpoint容错机制等。通过对Flink引擎进行Native化改造，以实现性能的显著提升。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/twp/kunpengbds_19_0042.html
sourcePath: /source/zh/kunpengbds/twp/kunpengbds_19_0042.html
indexId: 793448e6a703c05cecc1c4ec40b0b378625e496ba97c00175a96a68c1a046a6449
---
# OmniRuntime OmniStream Flink Native化

Apache Flink是一个开源的实时流处理引擎，适用于实时数据处理。随着业务的快速发展和数据量的急剧增长，在某些高负载场景下，Flink性能瓶颈逐渐显现，尤其是在互联网场景下，处理性能存在挑战。OmniStream Flink Native化特性是一种采用Native Code（C/C++）实现算子来提高查询性能的特性，主要分为Java实现的Java Adapter适配层和C++实现的CPP Core核心层。Java Adapter适配层主要用于生成Native的执行计划和不支持的场景回退Java Runtime。CPP Core核心层主要是实现各算子逻辑、数据传输及Checkpoint容错机制等。通过对Flink引擎进行Native化改造，以实现性能的显著提升。

Apache Flink提供了SQL和DataStream API两种编程接口，它们并非完全独立的“模式”，而是不同层次的抽象，适用于不同的开发场景和需求。针对这两种编程接口的特点，OmniStream实现了两套框架进行端到端加速。

#### 架构设计

SQL

OmniStream Flink SQL Native化架构如图1所示。

图1 OmniStream Flink SQL Native化整体架构设计

SQL/Table API输入后经过解析会生成执行计划，Java适配层获取该执行计划并初始化CPP侧相关Task，生成对应的算子链。初始化结束后，运行Task，从数据源读取数据，经过一系列算子处理后最终由Sink输出计算结果。

DataStream

OmniStream Flink DataStream Native化架构如图2所示。

图2 OmniStream Flink DataStream Native化整体架构设计

DataStream API输入后经过解析会生成执行计划，Java适配层获取该执行计划并初始化CPP侧相关Task，生成对应的算子链。初始化结束后，运行Task，从Source数据源读取数据，经过一系列算子处理后最终由Sink数据源输出。


#### OmniStream性能数据

SQL

OmniStream基于Nexmark 22条SQL基准测试用例实现Flink组件计算性能平均提升100%+（默认支持q0、q1、q2、q13、q14、q21、q22，其余SQL默认回退）。

图3 Nexmark 22条SQL性能测试结果


DataStream

OmniStream Flink DataStream Native编程接口，当前主要有以下两种用例。在WordCount场景下，OmniStream的性能达到开源版本Flink DataStream的1.31倍；在无状态的重计算场景中，OmniStream性能表现更为突出，达到开源版本方案的1.6倍。

图4 OmniStream Flink DataStream Native性能测试结果
