Skip to main content

与 Apache Kafka 的区别

AutoMQ 是基于云原生理念重新设计的新一代 Apache Kafka 发行版,在 100% 兼容 Apache Kafka 协议的前提下提供了高达 10 倍的成本优势和弹性优势。本文主要介绍 AutoMQ 和 Apache Kafka 的主要区别和关联。

与 Apache Kafka 的区别

架构:Shared Nothing vs Shared Storage

Apache Kafka 使用本地磁盘介质,通过软件层面的高可用副本复制逻辑(ISR 机制)构建一套高可靠存储,对业务逻辑侧提供一种“无限”的流式存储抽象。所有的 Kafka 数据都是按照特定的逻辑存储在本地磁盘介质上,上述思路一般称为 Shared Nothing 架构。

AutoMQ 区别于 Apache Kafka,采用了存算分离的思路,不再使用本地磁盘,而是使用共享的对象存储服务来保存数据。AutoMQ 抽象了一个 S3Stream 流存储库(软件库)来代替 Apache Kafka 的本地 Log 存储,在保证上层 Apache Kafka 功能语义不变的前提下,透明地使用了对象存储来保存 Kafka 数据,上述架构称为 Shared Storage 架构。

Apache Kafka 和 AutoMQ 的两种不同架构对比如下:

Apache Kafka
采用 Shared Nothing 架构
AutoMQ
采用 Shared Storage 架构
数据在本地磁盘,需要实现跨节点多副本复制
数据在 S3 共享存储(三副本高可靠),无需实现多副本复制
数据在各节点间隔离,数据访问绑定节点
数据在各节点间共享,可以跨节点共享访问
增加节点水平扩展、替换故障节点时需要重新迁移分片数据
增加节点、替换故障节点,无需迁移数据即可快速切换

说明:

Apache Kafka 自 3.6 版本开始规划分层存储能力(暂未生产可用),支持将历史数据卸载到对象存储服务中,该架构和 AutoMQ 完全依赖对象存储构建存储层有一定的相似性和区别。详细对比可参考与多级存储的区别▸

弹性:秒级分区迁移 vs 小时级分区迁移

分区迁移是 Kafka 生产环境中高频遇到且不可绕过的问题,在局部节点故障、集群扩缩容、局部热点处理 等场景中都需要进行分区迁移。

Apache Kafka 使用 Shared Nothing 架构,每个分区的数据全部存储在特定的存储节点。如果涉及到分区迁移,则需要将分区的全量数据搬迁到新的目标节点才能提供服务。上述过程存在耗时长、耗时不确定的问题。

举例:

以一个 100MiB/s 写入吞吐的 Kafka 分区为例,一天内产生的数据量约为 8.2TiB,如果需要迁移该分区则需要将全部数据搬迁到其他节点。即使分配 1Gbps 的网络带宽,也需要小时级耗时才能完成迁移。

AutoMQ 采用存算分离架构,每个分区的全量数据存储在 S3 对象存储中,进行分区迁移时仅需同步少量元数据即可完成切换。对于任意写入吞吐规模的分区,AutoMQ 都可以确保在秒级时间完成切换。

AutoMQ 支持秒级分区迁移,使得 AutoMQ 在集群弹性伸缩、故障恢复等场景中相比 Apache Kafka 具备更快、更确定的灵活性优势。

成本:10 倍成本差异

参考上文技术架构的差异,AutoMQ 和 Apache Kafka 在计算、存储的成本结构上同样存在较大差异。AutoMQ 在消息写入时无需做跨节点多副本复制,可以节省大部分的跨节点复制流量和压力。同时,AutoMQ 使用 S3 对象存储作为存储介质,在典型的公有云环境下,对象存储的成本远低于挂载到各节点的 EBS 块存储。

具体对比项目如下:

成本对比
Apache Kafka
AutoMQ
存储单价
  • 场景:1GB 数据需要 3GB EBS(三副本)
  • 成本:0.288 USD/月
  • 场景:1GB 业务数据需要 1GB S3
  • 成本:0.023 USD/月
跨节点复制流量
  • 场景:写入 1GB 数据,需跨节点复制 2GB 流量(三副本)
  • 成本:0.04 USD
  • 场景:写入 1GB 数据,直接上传 S3,无需跨节点流量(三副本)
  • 成本:0 USD

备注:

上述存储单价是以 AWS S3 美国东部 EBS GP3 实例和 S3 标准型存储对比,详细信息参考链接

上述跨节点流量复制成本以 AWS AZ 间流量传输成本为例。

关于 AutoMQ 和 Apache Kafka 的详细成本对比,参考AutoMQ vs. Apache Kafka 成本对比▸

容量: Reserved vs Pay-as-you-go

容量规划是 Kafka 大规模应用于生产场景的另一难题。由于 AutoMQ 和 Apache Kafka 的架构差异以及存储介质的差异,在容量规划层面有所差异:

Apache Kafka
使用本地磁盘、存算一体
AutoMQ
使用 S3 对象存储、存算分离
磁盘空间需要提前预留
存储空间无需预留,按需使用、按量付费
单节点存储有限,存储扩展性差
S3 对象存储空间近乎无限,存储扩展性好

与 Apache Kafka 100% 兼容

AutoMQ 作为重新设计的新一代 Kafka 发行版,在保证和 Apache Kafka 100% 兼容的前提下提供成本、弹性等方面更具优势的平替方案。基于 Apache Kafka 的应用都可以平滑迁移到 AutoMQ,而无需做任何修改和适配。

参考上文的架构对比,AutoMQ 是在存储层 AutoMQ Kafka 抽象出 S3Stream 流存储库来替代 Apache Kafka 的 Log 本地存储。存储层对上暴露相同的 Partition 抽象,上层 KRaft 元数据管理、 Coordinator、ReplicaManager、KafkaApis 等模块均可以复用原有的代码逻辑。存储层上层复用了 Apache Kafka 的逻辑。 AutoMQ 支持 100% 兼容 Apache Kafka 协议和语义,并可以持续跟进 Apache Kafka 的最新功能和缺陷修复。

关于 AutoMQ 和 Apache Kafka 的兼容性说明参考Apache Kafka 兼容性▸