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

相关推荐
第二只羽毛7 小时前
C++ 高性能编程要点
大数据·开发语言·c++·算法
释怀°Believe8 小时前
javaweb
数据库·sql·oracle
jason成都8 小时前
elasticsearch部署时创建用户密码
大数据·elasticsearch·jenkins
wuxuanok9 小时前
ThinkPHP ——安装部署与配置
sql·mysql·nginx·php
新华经济9 小时前
合同管理系统2025深度测评:甄零科技居榜首
大数据·人工智能·科技
黑客思维者10 小时前
招商银行信用卡AI客服系统:从0到1实战笔记
大数据·人工智能·笔记
醇氧11 小时前
【git】 撤回一个本地提交
大数据·git·elasticsearch
Elastic 中国社区官方博客11 小时前
Elasticsearch:数据脱节如何破坏现代调查
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
沃达德软件11 小时前
警务大数据挖掘技术
大数据·人工智能·数据挖掘
摇滚侠12 小时前
ElasticSearch 教程入门到精通,JavaAPI 环境搭建,索引创建,索引查询删除,笔记18、笔记19、笔记20
大数据·笔记·elasticsearch