大家好啊,最近在做 Flink 消费 Kafka 的性能优化,踩了不少坑,今天给大家分享一下我的实战经验 🚀
没错,就是这么个经典架构。不过关键不在架构图,而在于怎么调优。说实话,刚开始我也是一脸懵,后来经过无数次线上事故(😅)才总结出这些经验。
💡 重点配置都在这了
Kafka 消费者配置
Properties props = new Properties();
// 基础连接配置
props.setProperty("bootstrap.servers", "kafka1:9092,kafka2:9092");
props.setProperty("group.id", "flink-group");
// 消费者配置 - 这些都是我调了很久的最佳实践
props.setProperty("fetch.min.bytes", "1048576"); 1MB,别设太小,影响吞吐量
props.setProperty("fetch.max.wait.ms", "500"); 我之前设1000ms,延迟太高了
props.setProperty("max.partition.fetch.bytes", "5242880"); 5MB,根据数据量调整
props.setProperty("max.poll.records", "10000"); 单次拉取条数,太大容易OOM
props.setProperty("receive.buffer.bytes", "1048576"); 网络接收缓冲区
props.setProperty("send.buffer.bytes", "1048576"); // 网络发送缓冲区
// 消费者重试和超时配置
props.setProperty("session.timeout.ms", "30000"); // 会话超时时间
props.setProperty("heartbeat.interval.ms", "10000"); // 心跳间隔
props.setProperty("max.poll.interval.ms", "300000"); // 最大拉取间隔
props.setProperty("request.timeout.ms", "30000"); // 请求超时时间
// 序列化配置
props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
// 安全配置(如果需要)
props.setProperty("security.protocol", "SASL_PLAINTEXT");
props.setProperty("sasl.mechanism", "PLAIN");
复制
Flink 配置
说实话,这块配置最坑了,我调了好久:
# JobManager 配置
jobmanager:
memory:
process:
size: 4096m # 给大点,不然元数据多了扛不住
jvm-metaspace:
size: 512m # 元空间也得够
jvm-overhead:
fraction: 0.1
# TaskManager 配置
taskmanager:
memory:
process:
size: 8192m # 总内存,建议8G起步
framework:
heap:
size: 1024m # 框架堆内存
task:
heap:
size: 4096m # 任务堆内存,这个最重要
managed:
size: 2048m # 托管内存,RocksDB用这个
jvm-metaspace:
size: 512m # JVM元空间
jvm-overhead:
fraction: 0.1 # JVM开销
# CPU 配置
cpu:
cores: 4.0 # CPU核心数,根据实际机器配置
# 网络配置
network:
memory:
fraction: 0.1
request-backoff:
initial: 100
max: 10000
# Checkpoint 配置
execution:
checkpointing:
interval: 180000 # 3分钟一次,太频繁CPU吃不消
timeout: 120000 # 超时时间,给够点
min-pause: 60000 # 最小间隔1分钟
max-concurrent: 1 # 并发checkpoint数量
mode: EXACTLY_ONCE # 精确一次语义
unaligned: true # 非对齐checkpoint,建议开启
externalized:
enabled: true # 外部化checkpoint
# State Backend 配置
state:
backend: rocksdb # 用RocksDB准没错
backend.incremental: true # 增量checkpoint
checkpoints:
dir: hdfs://namenode:8020/flink/checkpoints # 存储路径
savepoints:
dir: hdfs://namenode:8020/flink/savepoints # 保存点路径
# RocksDB 具体配置
rocksdb:
block-cache-size: 256mb # 块缓存大小
write-buffer-size: 64mb # 写缓存大小
max-write-buffer-number: 4 # 最大写缓存数
block-size: 64kb # 块大小
compaction-style: LEVEL # 压缩方
复制
🔧 内存配置实战经验
1. 基础配置公式
总内存分配建议:
- 任务堆内存:40-50%
- 托管内存:30-40%
- 框架内存:10-15%
- JVM开销:10-15%
复制
taskmanager:
memory:
process:
size: 8g
task:
heap:
size: 4g
managed:
size: 2g
复制
中规模作业(数据量 100GB-1TB/天)
taskmanager:
memory:
process:
size: 16g
task:
heap:
size: 8g
managed:
size: 6g
复制
大规模作业(数据量 > 1TB/天)
taskmanager:
memory:
process:
size: 32g
task:
heap:
size: 16g
managed:
size: 12g
复制
3. RocksDB 场景特殊配置
# RocksDB 优化配置
state:
backend: rocksdb
backend.memory.managed: true
rocksdb:
block-cache-size: 256mb # 读缓存
write-buffer-size: 128mb # 写缓存
max-write-buffer-number: 4 # 写缓存个数
taskmanager:
memory:
managed:
fraction: 0.4 # 托管内存占比提高
framework:
heap:
size: 1g # 框架内存可以适当减少
复制
推荐阅读系列文章
建议收藏 | Dinky系列总结篇 建议收藏 | Flink系列总结篇 建议收藏 | Flink CDC 系列总结篇 建议收藏 | Doris实战文章合集 建议收藏 | Paimon 实战文章总结 建议收藏 | Fluss 实战文章总结 建议收藏 | Seatunnel 实战文章系列合集 建议收藏 | 实时离线输数仓(数据湖)总结篇 建议收藏 | 实时离线数仓实战第一阶段总结 超700star!电商项目数据湖建设实战代码 ,拿来即用! 从0到1建设电商项目数据湖实战教程 推荐一套开源电商项目数据湖建设实战代码
文章转载自大数据技能圈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
史诗级革新 | Apache Flink 2.0 正式发布
严少安
145次阅读
2025-03-25 00:55:05
Flink CDC+Hologres高性能数据同步优化实践
阿里云大数据AI技术
72次阅读
2025-03-18 09:46:17
kafka集群部署
easonhyj
37次阅读
2025-03-04 19:54:11
如何使用 RisingWave、Kafka 和 Redis 构建实时推荐引擎
RisingWave中文开源社区
31次阅读
2025-03-10 10:30:31
如何使用 RisingWave 和 PuppyGraph 构建高性能实时图分析框架
RisingWave中文开源社区
29次阅读
2025-03-18 10:49:54
Kafka删除Topic,弄不好会失败或发生故障
虞大胆的叽叽喳喳
22次阅读
2025-03-17 16:55:10
京东 x AutoMQ x CubeFS: 万亿级 Kafka 消息规模下的降本增效之旅
锋哥聊DORIS数仓
14次阅读
2025-03-07 10:29:18
vivo基于Paimon的湖仓一体落地实践
Flink 中文社区
13次阅读
2025-03-07 10:29:23
Flink CDC + Hologres高性能数据同步优化实践
Flink 中文社区
13次阅读
2025-03-05 11:08:46
五分钟入门Erlang语言基于brod类库实现操作Kafka案例总结
大数据从业者
12次阅读
2025-03-04 09:46:49