Flink中的 BinaryRowData 以及大小端

背景

本文基于 Flink 1.17.0

写此文章的目的是为了说明 Flink 堆内和堆外内存以及 内部 BinaryRowData 行处理的优化。

分析

堆内和堆外内存

跟Spark的内存管理不一样,Flink 中的堆内和堆外一直都是存在的。

堆内内存(JVM Heap)存储用户对象和Flink 框架的运行时数据,而堆外内存(Off-heap Memory)包括用于网络通信的直接内存(Direct Memory)和用于第三方库(如RocksDB)的堆外内存(offheap Memory)。

分别可以通过 MemorySegmentFactory 的 wrap allocateUnpooledOffHeapMemory allocateOffHeapUnsafeMemory 方法来进行分配对应的堆内,直接内存以及堆外内存。无论是堆内还是堆外内存都是用 MemorySegment 来承载的。

BinaryRowData

关于该BinaryRowData的作用和Spark中一样

  1. 减少GC压力
  2. 不影响正常的数据操作,减少了数据存储内存,精确计算内存的使用情况
  3. 减少了序列化和反序列化的的消耗

Byte大小端

MemorySegment 类中,也存在中大小端的判断:

复制代码
 private static final boolean LITTLE_ENDIAN =
            (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN);

在Flink 中,数据需要经过序列化和反序列化才能在网络中传输或持久化存储。如果数据源的字节序与Flink 运行的机器的字节序不一致,就可能出现解析错误。通过区分大端和小端,Flink 能够正确地进行转换,确保数据的一致性。

相关推荐
猴子年华、1 天前
【每日一技】:SQL 常用函数实战速查表(函数 + 场景版)
java·数据库·sql·mysql
云器科技1 天前
NinjaVan x 云器Lakehouse: 从传统自建Spark架构升级到新一代湖仓架构
大数据·ai·架构·spark·湖仓平台
泰迪智能科技1 天前
分享|2025年广东水利电力职业技术学院泰迪数据智能产业学院订单班结业典礼圆满结束
大数据·人工智能
中科天工1 天前
如何实现工业AI在智能制造中的应用?
大数据·人工智能·智能
Sui_Network1 天前
Sui 2025→2026 直播回顾中文版
大数据·前端·人工智能·深度学习·区块链
hans汉斯1 天前
基于数据重构与阈值自适应的信用卡欺诈不平衡分类模型研究
大数据·算法·机器学习·重构·分类·数据挖掘·机器人
麦聪聊数据1 天前
敏感数据安全吗?基于字段级血缘的 PII 数据全链路追踪
数据库·sql·安全
昌sit!1 天前
hadoop集群搭建
大数据·hadoop·分布式
在风中的意志1 天前
[数据库SQL] [leetcode-511] 511. 游戏玩法分析 I
数据库·sql·游戏
安科瑞刘鸿鹏171 天前
企业配电系统中开关柜“可视化运行管理”的实现路径
大数据·运维·网络·物联网