前置约束:瑞芯微RK3588芯片 是 ARM64架构,配备整机物理内存 32GB,同机混部:Flink + MySQL + MinIO + 多个 Java 业务服务 + 系统 / 容器开销。
⚠️ 核心原则:RK3588 不是服务器芯片,内存带宽、CPU 算力弱;混部场景绝对不能把内存打满,预留 OOM 缓冲。
第一步:整机内存拆分总预算(32GB)
如果你的 MySQL / 业务服务负载很低,可以上浮到 Flink 16GB;如果业务写入压力大,Flink 下调到 10GB。下面以推荐保守值:Flink 总 13GB举例。
Flink 参数推荐(Standalone / Docker 部署,单节点伪集群,RK3588 ARM64)
架构:1 个 JobManager + 1 个 TaskManager 进程(RK3588 单设备,不建议多 TM 进程,多进程会抢占 CPU / 内存,得不偿失) 注意:
jobmanager.memory.process.size= JM 完整进程内存(包含堆 + 元空间 + 网络 + 托管内存)taskmanager.memory.process.size= TM 完整进程内存(Flink 全量内存,包含堆、托管内存、网络缓冲)
✅ 推荐配置(Flink 总 13GB 方案,最均衡)
# JobManager
jobmanager.memory.process.size = 2g
# TaskManager
taskmanager.memory.process.size = 11g
taskmanager.numberOfTaskSlots = 4
参数解释
jobmanager.memory.process.size = 2g JM 是调度、Checkpoint 协调、元数据管理,不需要大内存。RK3588 单节点,2G 足够;如果任务非常多、状态量大,最多上调到 3G,没必要更大。
JM 内部自动拆分:JVM 堆 + 元空间 + offheap,不需要手动细调。
taskmanager.memory.process.size = 11g TM 是真正跑算子、状态后端、Checkpoint 的地方。
11G 是 Flink TM 进程总内存;
Flink 会自动划分:JVM 堆、托管内存(RocksDB 状态优先走托管堆外)、网络缓冲。
如果使用 RocksDB 状态后端(CDC 流处理常用),托管内存非常关键,不要手动把 TM 堆设太大,交给 Flink 自动分配。
taskmanager.numberOfTaskSlots = 4 RK3588 8 核 A76+A55,大小核架构。
Slot=4:均衡选择,兼顾并行度,又不会线程太多导致大小核调度混乱;
不建议大于 6:会出现大量线程抢占,ARM 大小核调度容易卡顿、GC 毛刺;
不建议小于 2:资源浪费。
建议全局并行度
parallelism.default≤4,和 slot 数量匹配。
备选方案 1:负载轻,Flink 缩小到 10GB(MySQL / 业务服务压力更大)
jobmanager.memory.process.size = 2g
taskmanager.memory.process.size = 8g
taskmanager.numberOfTaskSlots = 3
备选方案 2:业务服务压力很小,Flink 给到 16GB 上限
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. 踩坑提醒
RK3588 CPU 不是 x86,Flink、RocksDB 需要 ARM64 原生包,不要强行跑 x86 镜像;
混部环境不要开启 Flink 本地堆外内存无限制;依靠
taskmanager.memory.process.size做硬上限;MinIO 和 Flink 同机,Checkpoint 读写会抢占磁盘 IO,优先挂载高速 SSD;
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 微服务)。