Kafka FinOps:如何进行费用回收报告
Source: Dev.to

如果你将 Kafka 作为共享基础设施来运行,可能在某个时刻遇到过这样的问题:谁负责这个主题,它的成本是多少?
这正是 Kafka FinOps 试图解决的核心问题。在本文中,我将解释在 Kafka 环境中什么是费用分摊报告、为什么它很难实现,以及我们是如何在 PartitionPilot 中实现它的。
什么是费用回收报告?
费用回收(Chargeback)是从云计算 FinOps 中借鉴的一种做法:不再把基础设施费用视为单一的共享项目,而是按团队、服务或产品进行拆分——并让每个部门为其实际使用的资源付费。
在 AWS 或 GCP 中,这相对直接。云服务提供商会提供成本分配标签。但 Kafka 没有原生的成本模型。它并不了解团队、预算或所有权。
这就是 Kafka 费用回收报告的意义所在。
Kafka 中的两个成本驱动因素
在进行成本回收之前,您需要了解 Kafka 中实际产生费用的因素:
- 存储 — 每条写入主题的消息都会被存储在磁盘上,直至根据保留设置过期。具有 7 天保留期且高吞吐量的主题可能会消耗数百 GB。
- 流量 — 每个写入(bytes‑in)和读取(bytes‑out)主题的字节都会产生网络流量。在 AWS MSK 或 Confluent Cloud 上,这些流量会直接计费。
两者都可以通过 Prometheus JMX 指标进行测量:
kafka.log:type=Log,name=Size → storage per topic‑partition
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec → inbound traffic per topic
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec → outbound traffic per topic缺失的环节:所有权
仅有指标不足以实现费用回收。您还需要了解 每个主题的所有者。
在大多数 Kafka 部署中,主题所有权是部落式知识。它可能只存在于某个人的脑海中,或是三年前的 Confluence 页面上,甚至根本不存在。
要实现费用回收,您需要一个系统来:
- 跟踪每个主题由哪个团队或个人拥有
- 将成本指标与该所有权关联
- 生成财务或工程管理层真正能使用的报告
PartitionPilot 如何实现此功能
PartitionPilot 连接到您的 Prometheus 端点并定期获取成本快照。每个快照记录每个主题的存储和流量,并带有时间戳。
此外,它允许您为每个主题和消费者组分配所有者。所有权信息与成本数据一起存储在 PostgreSQL 数据库中。
结果是:一个 CSV 格式的费用分摊报告,示例如下:
Owner,Topic,Storage (GB),Traffic In (GB),Traffic Out (GB),Estimated Cost
Team A,orders.v2,12.4,45.2,180.8,CHF 23.40
Team B,user-events,8.1,120.3,360.9,CHF 41.20
Team C,analytics.raw,95.2,890.1,2670.3,CHF 312.80该报告可以导出并在每月与工程经理或财务团队共享。
为什么这比听起来更难
- Topic 是共享的。 一个 Topic 可以由一个团队写入,而被另外三个团队消费。谁为出站流量付费——生产者还是消费者?没有统一的答案。PartitionPilot 允许你为生产者和消费者两侧分配独立的所有权。
- Retention 使存储成本不直观。 Topic 的成本不仅取决于吞吐量,还取决于保留设置。一个低流量、保留 30 天的 Topic 可能比一个高流量、保留 1 小时的 Topic 更昂贵。
- 指标需要聚合。 原始的 Prometheus 指标是按 broker、按 partition 统计的。你需要在所有 broker 上按 Topic 聚合这些指标,才能得到有意义的数据。
Getting Started
PartitionPilot 通过 Docker Compose 自行托管。您可以在 partitionpilot.com 开始免费 30 天试用——无需信用卡。
如果您的团队将 Kafka 作为共享基础设施运行,并且想要开始进行合理的成本分配,试试看吧。