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

相关推荐
2601_9594779118 分钟前
Vatee平台平台运行稳定吗?
大数据·人工智能·安全
明夜之约20 分钟前
Elasticsearch 深度解析:从倒排索引原理到亿级数据生产实战
大数据·elasticsearch·搜索引擎
大大大大晴天21 分钟前
告别 Lambda 架构!Flink 批流一体底层原理解析
flink
garmin Chen22 分钟前
Elasticsearch(1):Elasticsearch核心原理与基础操作总结
java·大数据·笔记·elasticsearch·搜索引擎·全文检索
humors22131 分钟前
聊聊密码为啥会“白设”
大数据·运维·服务器·网络·网络安全
Sharewinfo_BJ36 分钟前
Power BI 5月重磅更新:8大新功能全面提升数据分析效率
大数据·人工智能·数据分析
中电金信39 分钟前
中电金信分布式核心系统与鲲鹏实现“原生开发”,共筑数智金融新范式
大数据·人工智能
一切皆是因缘际会41 分钟前
AI高速迭代下的技术风险与理性突围
大数据·数据结构·人工智能·架构
SEO_juper1 小时前
“不可替代内容”=GEO 核心:AI 抄不走的经验、数据、案例
大数据·人工智能·seo·geo·谷歌优化·2026·谷歌算法更新
superantwmhsxx1 小时前
GPT-5.5:面向下一代智能应用的技术展望
大数据·人工智能·gpt