对比项 | AutoMQ | Apache Kafka |
---|---|---|
计算 | $2859 | $18,447 |
存储 | $5,961 | $69,984 |
S3 API | $3,952 | $0 |
跨可用区流量费 | $128 | $138,240 |
总计 | $12,899 | $226,671 |
Benchmark 准备
使用 1 GiB/s 的流量向一个有 256 分区的 Topic 进行生产消费压测。AutoMQ 集群
AutoMQ 可以通过 Bitnami Kafka Helm Chart 在 k8s 上部署。可以参考 Install AutoMQ by Helm Chart 在 AWS 上部署一个 3 可用区的 AutoMQ 集群:- 总共 6 个节点,3 个 Server 和 3 个 Broker,均匀分布在 3 个可用区;
- 物理节点机型选择 m7g.4xlarge:规格 16C64G、网络基线 960 MiB/s、价格 $476.544 / 月。
压力机
压力机在 3 个可用区各部署 1 台 m7g.4xlarge,模拟多可用区的业务负载。使用 AutoMQ 提供的automq-perf-test.sh
压测脚本进行压测,配置如下
-
总共 60 个 Producer 和 60 个 Consumer,均匀的分布在 3 个可用区,通过
client.id=automq_az=apse1-az1
来标记客户端所属的可用区; - 每秒发送 1,048,575 条 1KiB 大小的 Record,总共发送 1 GiB/s 的数据;
-
发送参数额外添加
batch.size=1048576 linger.ms=100
来获得更好的攒批效果,适配大多数 Kafka 的高吞吐场景。
成本
在数据保存 3 天(log.rentention.hours=72
)的场景下,以 AWS 的 us-east-1 地域为例,AutoMQ 的总持有成本为 $12,899 每月。总持有成本包括:计算、存储、S3 API 和跨可用区流量。
- 计算:AutoMQ 在该压测场景使用了 6 台 m7g.xlarge,计算资源总成本为 6 * 2,859 每月。
- 存储:流量 * 3天 * S3单价 = 1 * (60 * 60 * 24 * 3) * 0.023 = $5,961 每月。
- S3 API:在该流量下,平均 Get 1,278/s、Put 202.662/s,成本为 $3,952 每月。

- 跨可用区流量:虽然 AutoMQ 实现了客户端只往同可用区的 Broker 收发消息,但是 Broker 之间仍旧会有少量的 RPC 请求来同步 KRaft 元数据和转发 ZoneRouterProduceRequest。我们使用
iftop -t -s 60 -L 100
在 Broker 节点上采集跨可用区流量。一个节点的跨可用区 Network In + Network Out 平均为 0.84 MiB/s,6 个节点的跨可用区流量成本为 0.84 / 1024 * 6 * (60 * 60 * 24 * 30) * 0.01 ~= $127 每月。
相比 Apache Kafka 14x 成本降低
相同的负载在 Apache Kafka 则需要 $65,385 每月,是 AutoMQ 的 14x 倍。总持有成本包括:计算、存储和跨可用区流量。- 存储:存储 1 / 1024 * (60 * 60 * 24 * 3) = 253.125 TiB 的数据。3 副本存储则需要消耗 759.375 TiB 的空间。再考虑到 Buffer 和数据分布不均衡,假设 50% 的有效磁盘利用率,则需要准备 1,518.75 TiB 的磁盘空间。为了节省磁盘存储成本存储介质使用 st1,那么存储成本为 1518.75 * 1024 * 0.045 = $69,984 每月。
- 计算:一块 EBS 最大 16TiB,那么至少需要 95 个 Volume, 对应 95 个 Broker。按照生产实践最小的推荐机型为 r4.xlarge,成本为 $18,447.1 每月。
- 跨可用区流量:在分区和流量均匀分布的情况下,有 2 / 3 的生产流量会跨可用区发送。消费可以通过 Fetch From Follower 免去跨可用区流量。Fetch From Follower 意味着对应的副本会分布在 3 个可用区,Broker ISR 之间又产生两份生产流量。总体上跨可用区流量为:生产流量 * (2 / 3 + 2) * 30d = 1024 * (2 / 3 + 2) / 1024 * (60 * 60 * 24 * 30) * 0.02 = $138,240 每月。
- AutoBalancing:AutoMQ 在 Controller 中内置负载均衡组件,会自动根据节点间的流量进行负载均衡,且分区迁移耗时不到 2s,无需运维人员手工负载均衡。
- No Overprovisioning:节点无状态和秒级分区迁移让 AutoMQ 可以分钟级(时间花费在资源准备)的进行伸缩,扩容后秒级完成负载均衡。AutoMQ 无需为高峰提前预留资源和小时级的负载均衡。
性能
每个 AutoMQ Broker 的 CPU 水位为 50%。有充足空闲的 CPU 来应对流量尖刺和更多的小包请求。
- | AVG | P50 | P99 | P999 |
---|---|---|---|---|
Produce | 472ms | 465ms | 823ms | 1049ms |
E2E | 631ms | 602ms | 1189ms | 1549ms |
s3.wal.path
和 automq.zonerouter.channels
中 batchInterval
参数来降低攒批写入 S3 的等待延迟。不过在获得更低的延迟的同时,S3 API 的成本会随之上升。