内容提要
本文介绍 Amazon MSK 成本优化实践。MSK 费用包括 broker 实例、存储、跨 AZ 流量和监控。核心优化措施:启用 zstd 压缩并调整批处理参数以降低存储与流量费用;缩短数据保留期或启用分层存储;开启机架感知消费以消除跨 AZ 读取费;按需选择监控档位;合理选型 Standard 与 Express。综合优化后成本可降低约九成。
延伸解读
优化收益的归因与边界
文中约九成的成本降幅来自压缩、保留期调整、机架感知消费与容量重规划的组合,但各项优化不能把百分比相乘。压缩后数据量下降,保留期和跨 AZ 的绝对节省额随之缩小,表中数据是用同一成本模型分别计算各终态得出。此外,只改客户端压缩配置而不调整集群规格,仅能节省跨 AZ 流量费用;保留期从 7 天降到 2 天属于业务决策,前提是消费者故障恢复窗口确实不需要 7 天。
Standard 与 Express 的计费口径差异
两者成本差异不在单价表,而在两处:Standard 存储按预置 EBS 容量计费,有效存储量为逻辑数据量乘以 RF 再除以 EBS 目标利用率,默认参数下倍数为 6;Express 按逻辑数据量计费一次,不乘副本数,也无需预留磁盘余量。Express 还多一项与保留时长无关的 data-in 费。因此保留期越长,Express 的存储优势越能覆盖 data-in 的固定成本;但 Express 不支持分层存储,超长保留期需求应继续使用 Standard。
机架感知消费的配置陷阱
Express 默认不开启就近消费,broker 端 replica.selector.class 为空,所有 Fetch 请求打向 leader。开启需创建仅含该属性的 cluster configuration 并应用,触发滚动重启,实测 3 台 express.m7g.large 耗时 48 分钟。消费端 client.rack 必须使用 AZ ID(如 use1-az2)而非 AZ 名称,否则精确字符串比较静默失效,行为回退到读 leader 且不报错。AZ 名称到 AZ ID 的映射因账号而异,需从 IM
监控档位与指标规模的成本风险
CloudWatch 监控档位中,PER_TOPIC_PER_PARTITION 的指标条数按消费组数、topic 数、分区数三重乘积放大,是监控成本爆炸的主要来源。以中型集群估算,该档位月费可达 PER_BROKER 的数十倍。PER_BROKER 是容量管理的下限,低于它就无法按文中方法判断规格是否合适。调整档位前应先审计现有告警与看板依赖的指标档位,再决定档位,而不是反过来。
Q&A
Amazon MSK 的成本主要由哪些部分构成?
MSK 费用包括 broker 实例费、存储费(EBS 或 Express 存储)、跨 AZ 数据传输费以及 CloudWatch 监控费。其中跨 AZ 传输费和 CloudWatch 自定义指标费不在 AmazonMSK 产品码下,需分别查看 AmazonEC2 和 AmazonCloudWatch。
如何通过压缩和批处理参数优化 MSK 成本?
启用 zstd 压缩并调整生产端批处理参数(如 batch.size=262144、linger.ms=25)可显著降低存储和跨 AZ 流量费用。压缩后需重新调整 broker 规格或数量才能进一步节省实例费。
MSK 跨 AZ 流量费用如何消除?
消费侧跨 AZ 流量可通过开启机架感知消费(配置 replica.selector.class=RackAwareReplicaSelector 并设置 client.rack 为 AZ ID)来消除,使同 AZ Fetch 占比提升至 97%。生产侧跨 AZ 写入无法避免。
Standard 和 Express broker 在成本上有哪些关键差异?
Express broker 单价是同规格 Standard 的 2 倍,但存储按逻辑数据量计费一次(不乘 RF),且多一项 data-in 费($0.010/GB)。Standard 存储按预置 EBS 容量计费(逻辑量×RF÷利用率),无 data-in 费。保留期越长,Express 存储优势越明显。
如何优化 MSK 的数据保留策略以降低存储成本?
可缩短保留期(如从 7 天降至 2 天)或启用分层存储(仅 Standard)。按 topic 设置 retention.ms,并检查 MaxOffsetLag 和 EstimatedMaxTimeLag 历史峰值以确定合理保留期。
MSK 监控成本如何控制?
按需选择 CloudWatch 监控档位,PER_BROKER 是容量管理下限,PER_TOPIC_PER_PARTITION 费用随消费组×topic×分区数乘积增长。可只对关键 topic 保留细粒度,并定期清理无活跃消费者的消费组。