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 能够正确地进行转换,确保数据的一致性。

相关推荐
Gent_倪3 分钟前
数据建模概念解析
大数据·数据建模
永霖光电_UVLED7 分钟前
Polar Light 获得了欧盟Eurostars计划的110万欧元(€1.1m)资助
大数据·人工智能·物联网·汽车·娱乐
琪伦的工具库17 分钟前
批量excel文件删除列工具使用说明:按列号或列名批量删除/保留,支持预览与大文件优化
大数据·excel
武子康1 小时前
大数据-266 实时数仓-Canal + Kafka 实现 MySQL 数据库变更实时捕获
大数据·后端·kafka
TDengine (老段)1 小时前
中原油田引入时序数据库 TDengine:写入性能提升、存储成本下降 85%
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
财经资讯数据_灵砚智能1 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月12日
大数据·人工智能·信息可视化·自然语言处理·ai编程
Crazy CodeCrafter2 小时前
现在做服装,实体和电商怎么选?
大数据·数据库·人工智能·微信·开源软件·零售
2601_954434552 小时前
2026年专业深度测评:入门电钢琴品牌排名前五权威发布
大数据·人工智能·python
xixixi777772 小时前
通信产业的“全维度加速”:从5G-A商用、6G冲刺到卫星互联网密集组网
大数据·网络·人工智能·ai·多模型
数厘2 小时前
2.12 sql 数据插入(INSERT INTO)
数据库·sql·oracle