Skip to main content

AutoMQ vs. Apache Kafka 性能和成本对比

AutoMQ 基于云存储对 Apache Kafka 的存储层进行云原生重构,不仅 100% 兼容 Apache Kafka 的 API,并且在 1GiB/s (压缩前)流量下,相比 Apache Kafka 取得了 14x 成本优势。每月 TCO 从 Apache Kafka $65,385 下降到 $4,380。费用明细如下表所示:

对比项
AutoMQ
Apache Kafka
计算
$714
$5,242
存储
$1,723
$20,183
S3 API
$1,928
$0
跨可用区流量费
$15
$39,960
总计
$4,380
$65,385

Benchmark 准备

为了方便与其他产品进行比较,AutoMQ 选择了业界标准的压测场景:使用 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.xlarge:规格 4C16G、网络基线 238 MiB/s、价格 $119.14 / 月。

压力机

压力机在 3 个可用区各部署 1 台 m6n.8xlarge,模拟多可用区的业务负载。使用 AutoMQ 提供的 automq-perf-test.sh 压测脚本进行压测,配置如下


KAFKA_HEAP_OPTS="-Xmx32g -Xms32g" nohup ./bin/automq-perf-test.sh --bootstrap-server $bootstrap_server --record-size 1024 --random-ratio 0.25 --topics 1 --partitions-per-topic 256 --topic-prefix perf --producers-per-topic 32 --groups-per-topic 1 --consumers-per-group 32 --send-rate 350000 --warmup-duration 2 --test-duration 180 --producer-configs batch.size=1048576 linger.ms=100 buffer.memory=134217728 max.request.size=67108864 compression.type=lz4 client.id='automq_az=apse1-az1' --consumer-configs fetch.max.bytes=104857600 max.partition.fetch.bytes=104857600 client.id='automq_az=apse1-az1' --reset &> nohup.log &

KAFKA_HEAP_OPTS="-Xmx32g -Xms32g" nohup ./bin/automq-perf-test.sh --bootstrap-server $bootstrap_server ... client.id='automq_az=apse1-az2' --await-topic-ready false &> nohup.log &

KAFKA_HEAP_OPTS="-Xmx32g -Xms32g" nohup ./bin/automq-perf-test.sh --bootstrap-server $bootstrap_server ... client.id='automq_az=apse1-az3' --await-topic-ready false &> nohup.log &

通过该配置,压力机会模拟如下场景:

  • 总共 96 个 Producer 和 96 个 Consumer,均匀的分布在 3 个可用区,通过 client.id=automq_az=apse1-az1 来标记客户端所属的可用区;

  • 每秒发送 1,050,000 条 1KiB 大小的 Record,总共发送 1 GiB/s (压缩前)的数据,其中预期的数据非随机率为 0.25;

  • 发送参数额外添加 batch.size=1048576 linger.ms=100 来获得更好的攒批效果,适配大多数 Kafka 的高吞吐场景。

成本

在数据保存 3 天( log.rentention.hours=72 )的场景下,以 AWS 的 us-east-1 地域为例,AutoMQ 的总持有成本为 $4,380 每月。总持有成本包括:计算、存储、S3 API 和跨可用区流量。

  • 计算:AutoMQ 在该压测场景使用了 6 台 m7g.xlarge,计算资源总成本为 6 * $119.14 = $714 每月。

  • 存储:流量 * 3天 * S3单价 = (296 / 1024) * (60 * 60 * 24 * 3) * 0.023 = $1,723 每月。

  • S3 API:在该流量下,平均 Get 416/s、Put 115.52/s,成本为 $1,928 每月。

  • 跨可用区流量:虽然 AutoMQ 实现了客户端只往同可用区的 Broker 收发消息,但是 Broker 之间仍旧会有少量的 RPC 请求来同步 KRaft 元数据和转发 ZoneRouterProduceRequest。我们使用 iftop -t -s 60 -L 100 在 Broker 节点上采集跨可用区流量。一个节点的跨可用区 Network In + Network Out 平均为 0.1 MiB/s,6 个节点的跨可用区流量成本为 0.1 / 1024 * 6 * (60 * 60 * 24 * 30) * 0.01 ~= $15 每月。

AutoMQ 的成本总和为:计算 + 存储 + S3 API + 跨可用区流量 = $4,381.115 每月。

相比 Apache Kafka 14x 成本降低

相同的负载在 Apache Kafka 则需要 $65,385 每月,是 AutoMQ 的 14x 倍。总持有成本包括:计算、存储和跨可用区流量。

  • 存储:存储 (296 / 1024 / 1024) * (60 * 60 * 24 * 3) = 73 TiB 的数据。3 副本存储则需要消耗 219 TiB 的空间。再考虑到 Buffer 和数据分布不均衡,假设 50% 的有效磁盘利用率,则需要准备 438 TiB 的磁盘空间。为了节省磁盘存储成本存储介质使用 st1,那么存储成本为 438 * 1024 * 0.045 = $20,183 每月。

  • 计算:一块 EBS 最大 16TiB,那么至少需要 27 个 Volume, 对应 27 个 Broker。按照生产实践最小的推荐机型为 r4.xlarge,成本为 $5,242 每月。

  • 跨可用区流量:在分区和流量均匀分布的情况下,有 2 / 3 的生产流量会跨可用区发送。消费可以通过 Fetch From Follower 免去跨可用区流量。Fetch From Follower 意味着对应的副本会分布在 3 个可用区,Broker ISR 之间又产生两份生产流量。总体上跨可用区流量为:生产流量 * (2 / 3 + 2) * 30d = 296 * (2 / 3 + 2) / 1024 * (60 * 60 * 24 * 30) * 0.02 = $39,960 每月。

Apache Kafka 的成本总和为:计算 + 存储 + 跨可用区流量 = $65,385 每月。

除了静态成本降低以外,AutoMQ 的无状态架构还提供了更多的成本优势:

  • AutoBalancing:AutoMQ 在 Controller 中内置负载均衡组件,会自动根据节点间的流量进行负载均衡,且分区迁移耗时不到 2s,无需运维人员手工负载均衡。

  • No Overprovisioning:节点无状态和秒级分区迁移让 AutoMQ 可以分钟级(时间花费在资源准备)的进行伸缩,扩容后秒级完成负载均衡。AutoMQ 无需为高峰提前预留资源和小时级的负载均衡。

性能

1 GiB/s 的数据压缩过后为 296 MiB/s,每个 AutoMQ Broker 的 CPU 水位为 50%。有充足空闲的 CPU 来应对流量尖刺和更多的小包请求。

AutoMQ 写 S3 默认使用 8MiB / 250ms 攒批参数,Produce 的 Record 持久化到 S3 后再返回给客户端成功。在该测试中,延迟表现如下:

  • 发送: avg 369ms, p99 642ms。

  • 消费 E2E:avg 1577ms, p99 3162ms。


2025-05-15 09:34:09 - INFO Summary | Prod rate 350044.42 msg/s / 341.84 MiB/s | Prod total 630.31 M msg / 601.11 GiB / 0.00 K err | Cons rate 393002.48 msg/s / 383.79 MiB/s | Cons total 707.66 M msg / 674.88 GiB | Prod Latency (ms) avg: 369.097 - 50%: 362.969 - 75%: 431.169 - 90%: 490.921 - 95%: 529.383 - 99%: 642.595 - 99.9%: 830.523 - 99.99%: 1084.759 - Max: 1469.495 | E2E Latency (ms) avg: 1577.448 - 50%: 1692.823 - 75%: 2086.991 - 90%: 2363.135 - 95%: 2513.055 - 99%: 3162.623 - 99.9%: 6984.543 - 99.99%: 7713.023 - Max: 8380.255