与 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 |
---|---|---|
存储单价 |
|
|
跨节点复制流量 |
|
|
备注:
上述存储单价是以 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 兼容性▸。