易君召
易君召
发布于 2026-10-23 / 1 阅读
0

瑞芯微RK3588+32GB整机内存部署 Flink 资源规划分析

前置约束:瑞芯微RK3588芯片 是 ARM64架构,配备整机物理内存 32GB,同机混部:Flink + MySQL + MinIO + 多个 Java 业务服务 + 系统 / 容器开销。

⚠️ 核心原则:RK3588 不是服务器芯片,内存带宽、CPU 算力弱;混部场景绝对不能把内存打满,预留 OOM 缓冲。

第一步:整机内存拆分总预算(32GB)

模块

分配内存

说明

Linux 系统 + 内核、容器开销

3GB

RK3588 系统、kubelet/docker、网络、pagecache,底线

MySQL

6GB

innodb_buffer_pool 建议 4~5G,其余连接 / 排序缓冲;业务压力大最多给到 8G

MinIO

4GB

MinIO 本身轻量,大对象场景不要超过 4G,避免抢占

多个 Java 业务服务

6GB

多个 SpringBoot 微服务堆总和,按需拆分,预留元空间

Flink 集群总可用内存

13GB

JobManager + TaskManager 全部进程内存上限

如果你的 MySQL / 业务服务负载很低,可以上浮到 Flink 16GB;如果业务写入压力大,Flink 下调到 10GB。下面以推荐保守值:Flink 总 13GB举例。


架构:1 个 JobManager + 1 个 TaskManager 进程(RK3588 单设备,不建议多 TM 进程,多进程会抢占 CPU / 内存,得不偿失) 注意:jobmanager.memory.process.size = JM 完整进程内存(包含堆 + 元空间 + 网络 + 托管内存) taskmanager.memory.process.size = TM 完整进程内存(Flink 全量内存,包含堆、托管内存、网络缓冲)

# JobManager
jobmanager.memory.process.size = 2g

# TaskManager
taskmanager.memory.process.size = 11g
taskmanager.numberOfTaskSlots = 4

参数解释

  1. jobmanager.memory.process.size = 2g JM 是调度、Checkpoint 协调、元数据管理,不需要大内存。RK3588 单节点,2G 足够;如果任务非常多、状态量大,最多上调到 3G,没必要更大。

    JM 内部自动拆分:JVM 堆 + 元空间 + offheap,不需要手动细调。

  2. taskmanager.memory.process.size = 11g TM 是真正跑算子、状态后端、Checkpoint 的地方。

    • 11G 是 Flink TM 进程总内存;

    • Flink 会自动划分:JVM 堆、托管内存(RocksDB 状态优先走托管堆外)、网络缓冲。

    如果使用 RocksDB 状态后端(CDC 流处理常用),托管内存非常关键,不要手动把 TM 堆设太大,交给 Flink 自动分配。

  3. taskmanager.numberOfTaskSlots = 4 RK3588 8 核 A76+A55,大小核架构。

    • Slot=4:均衡选择,兼顾并行度,又不会线程太多导致大小核调度混乱;

    • 不建议大于 6:会出现大量线程抢占,ARM 大小核调度容易卡顿、GC 毛刺;

    • 不建议小于 2:资源浪费。

建议全局并行度 parallelism.default ≤4,和 slot 数量匹配。

jobmanager.memory.process.size = 2g
taskmanager.memory.process.size = 8g
taskmanager.numberOfTaskSlots = 3
jobmanager.memory.process.size = 3g
taskmanager.memory.process.size = 13g
taskmanager.numberOfTaskSlots = 4

⚠️ 此方案风险更高,一旦 Flink 任务状态暴涨、MySQL 刷脏页,整机容易 OOM,仅测试环境使用。


关键配套调优(RK3588 + 32GB)

1. 状态后端选型(CDC 场景)

优先 RocksDBIncrementalCheckpoint,RocksDB 使用堆外托管内存,比 HashMapStateBackend 更适合大状态,减少 JVM GC 压力。

state.backend = rocksdb
state.checkpoints.dir = s3://minio-bucket/flink-checkpoint
state.savepoints.dir = s3://minio-bucket/flink-savepoint

注意:RK3588 的 eMMC/SSD IO 性能有限,Checkpoint 不要频繁,execution.checkpointing.interval 建议 ≥30s,避免打满磁盘 IO 拖垮 MySQL。

2. JVM 额外建议(ARM64)

RK3588 ARM 平台,JVM GC 推荐 G1GC,不要用 ZGC(老版本 JDK ARM64 ZGC 稳定性差)。 在 flink-conf.yaml 添加:

env.java.opts.jobmanager: "-XX:+UseG1GC"
env.java.opts.taskmanager: "-XX:+UseG1GC -XX:MaxGCPauseMillis=200"

3. 容器部署额外限制(Docker)

如果你用容器部署整套服务:

  • 每个容器必须设置 memory limit,严格限制,不要开无限制内存,防止一个进程吃光整机内存;

  • 给 Flink JM 容器 mem_limit:2g,TM 容器 mem_limit:11g,和上面 process.size 保持一致;

  • 开启内存 swap 不推荐,RK3588 swap 性能极差,OOM 会卡死,尽量禁用 swap。

4. 并行度最佳实践

  • 单任务并行度 ≤ TaskSlot 数量(4)

  • 多个任务同时运行时,所有任务并行度总和不要超过 slot 数 4,不要同时跑多个高并行任务,RK3588 算力瓶颈很明显。

5. 踩坑提醒

  1. RK3588 CPU 不是 x86,Flink、RocksDB 需要 ARM64 原生包,不要强行跑 x86 镜像;

  2. 混部环境不要开启 Flink 本地堆外内存无限制;依靠taskmanager.memory.process.size做硬上限;

  3. MinIO 和 Flink 同机,Checkpoint 读写会抢占磁盘 IO,优先挂载高速 SSD;

  4. MySQL 和 Flink CDC 同机,MySQL binlog 读取会消耗 CPU,大流量 CDC 会挤压 Flink 算力。

总结推荐值(生产 / 稳定优先)

jobmanager.memory.process.size = 2g
taskmanager.memory.process.size = 11g
taskmanager.numberOfTaskSlots = 4

整机预留充足余量,适配 RK3588 32GB 混部场景(Flink+MySQL+MinIO+Java 微服务)。