
AutoMQ 介绍
Apache Kafka 自诞生之日起,就以其卓越的设计和强大的功能,很快成为了流系统领域的事实标准。它不仅定义了现代流系统的架构,更以其独特的分布式日志抽象,为实时数据流的处理和分析提供了前所未有的能力。Kafka 的成功,在于它能够满足各种规模企业对于高吞吐量、低延迟数据处理的需求,经过多年的发展铸就了极其丰富的 Kafka 生态并被广泛应用于各种生产场景。 然而,随着云计算和云原生技术的飞速发展,Kafka 面临的挑战也日益严峻。传统的存储架构已难以适应云环境下用户对更优成本、弹性的诉求,这引发了大家对 Kafka 存储模型的重新思考。分层存储(Tiered Storage)一度被视为可能的解决方案,它试图通过将数据分层存储在不同的介质上,来降低成本并延长数据的生命周期。但实践表明,这种方法并没有彻底解决 Kafka 的痛点,反而增加了系统的复杂性和运维难度。 AutoMQ 是一个源代码开放的 Kafka 分叉项目,通过存算分离的方式将 Kafka 的存储层替换成了基于 S3 和 EBS 的共享存储架构,并且复用了 Kafka 100% 的计算层代码,保证了对 Kafka API 协议和生态的完全兼容。如下图所示,通过这种创新的共享存储架构,不仅获得了共享存储带来的技术和成本优势,彻底解决了原有 Kafka 在成本、弹性等方面的弊病,同时不会牺牲延迟。
与其他流系统的对比
特性 | AutoMQ | Apache Kafka | Confluent | Apache Pulsar | Redpanda | Warpstream |
Apache Kafka 兼容性[1] | 原生 Kafka | 原生 Kafka | 原生 Kafka | 非 Kafka | Kafka 协议兼容 | Kafka 协议兼容 |
是否开源 | 是 | 是 | 否 | 是 | 是 | 否 |
无状态 Broker | 是 | 否 | 否 | 是 | 否 | 是 |
P99 延迟 | 单位数毫秒延迟 | 单位数毫秒延迟 | 单位数毫秒延迟 | 单位数毫秒延迟 | 单位数毫秒延迟 | > 1200毫秒 |
持续自平衡 | 是 | 否 | 是 | 是 | 是 | 是 |
扩展/缩减效率 | 以秒计 | 以小时/天计 | 以小时计 | 以小时计<br>(缩减);<br> 以秒计<br>(扩展) | 以小时计<br>以秒计 (仅限企业版) | 以秒计 |
Spot 实例支持 | 是 | 否 | 否 | 否 | 否 | 是 |
分区重新分配 | 以秒计 | 以小时/天计 | 以小时计 | 以秒计 | 以小时计<br>以秒计 (仅限企业版) | 以秒计 |
组件 | 代理 | 代理<br>ZooKeeper<br>(非 KRaft) | 代理<br>ZooKeeper<br>(非 KRaft) | 代理<br>ZooKeeper<br>BookKeeper<br>代理(可选) | 代理 | 代理<br>元数据服务器 |
持久性 | 由 S3/EBS 保证[2] | 由 ISR 保证 | 由 ISR 保证 | 由 BookKeeper 保证 | 由 Raft 保证 | 由 S3 保证 |
跨可用区网络费用 | 否 | 是 | 是 | 是 | 是 | 否 |
[1] Apache Kafka 兼容性的定义来自这篇 博客。
[2] EBS 持久性:在 Azure、GCP 和阿里云上,区域 EBS 副本跨多个可用区。在 AWS 上,通过在不同可用区的 EBS 和 S3 Express One Zone 进行双写来确保持久性。
创新的存储架构
更新内容
- chore: 将 s3stream 模块移回 automq kafka 仓库,作者 @daniel-y,PR #929
- feat(others): 迁移其他文件,作者 @superhx,PR #930
- fix(README): 添加 README 图片,作者 @superhx,PR #931
- feat(s3stream): 将 s3stream 添加到 gradle 构建系统,作者 @ShadowySpirits,PR #932
- fix(core): 修复优化条件检查,作者 @SCNieh,PR #934
- fix(core): 修复测试集群的配置,作者 @ShadowySpirits,PR #936
- feat(s3stream): 分配内存的策略,作者 @Chillax-0v0,PR #938
- fix(core): 修复 ElasticReplicaManagerTest,作者 @ShadowySpirits,PR #940
- chore(s3stream): 移除分配策略 "UNPOOLED_HEAP",作者 @Chillax-0v0,PR #942
- chore: 优化 README 文件,作者 @KaimingWan,PR #945
- feat(metadata): 将 automq 元数据添加到元数据 shell,作者 @superhx,PR #947
- chore(workflow): 忽略 "1.0.2-s3stream" 之类的标签,作者 @Chillax-0v0,PR #955
- perf(ReplicaManager): 读取后释放未使用的许可,作者 @Chillax-0v0,PR #935
- feat: 给 S3 对象打标签,作者 @Chillax-0v0,PR #956
- feat(config): 自动内存适配,作者 @Chillax-0v0,PR #949
- fix(s3stream): 仅在非空时设置标签,作者 @Chillax-0v0,PR #957
- fix(controller): 修复分区迁移在 broker 失效后失败的问题,作者 @superhx,PR #958
- fix(core): 修复调整 s3 缓存相关配置的问题,作者 @ShadowySpirits,PR #959
- fix(controller): 修复重新分配失败的问题,作者 @superhx,PR #960
- fix(core): 修复 ElasticLog#formatStreamKey,作者 @ShadowySpirits,PR #961
- fix(core): 修复重复打开分区的问题,作者 @ShadowySpirits,PR #962
- fix(core): 在创建日志过程中实现并行,作者 @ShadowySpirits,PR #963
- feat: 添加钩子点,作者 @superhx,PR #964
- refactor(config): 在 KafkaConfig 中调整配置而不是在 Kafka 中,作者 @Chillax-0v0,PR #970
- fix(bin): 修复日志变量,作者 @SCNieh,PR #972
- feat(metrics): 支持 kraft 相关的指标,作者 @SCNieh,PR #974
- fix(tools): 当 controllerOnlyMode 为 false 时不会输出额外命令,作者 @funky-eyes,PR #967
- feat(tool): 下一个节点 ID,作者 @superhx,PR #976
- fix(test): 修复新组协调器负载,作者 @superhx,PR #977
- fix(test): 禁用 E2E zookeeper 相关测试,作者 @superhx,PR #980
- fix(test): 更新 E2E 基础镜像,作者 @superhx,PR #981
- fix(common): 修复 NPE,作者 @superhx,PR #984
- fix(network): 适配回调队列,作者 @superhx,PR #985
- chore(E2E): 将主要 E2E 测试分为 3 个任务,作者 @superhx,PR #986
- fix(issues987): 修复 StreamMetadataManager NPE,作者 @superhx,PR #988
- fix(metadata): 避免在 endOffset 为 -1 时 getObjects 返回无效,作者 @SCNieh,PR #991
- fix(s3stream): 修复在 tryRealFree 期间的潜在并发修改,作者 @SCNieh,PR #990
- fix(s3stream/wal): 在恢复模式下路径不存在时快速失败,作者 @Chillax-0v0,PR #993
- fix(test): 将堆大小增加到 1GiB,作者 @superhx,PR #994
- fix(issues996): 修复 fetch NPE,作者 @superhx,PR #997
- chore(test): 将 transactions_test 移到单独的测试套件,作者 @superhx,PR #998
- fix(s3stream): 修复 cf 组合,作者 @SCNieh,PR #1000
- refactor(s3stream): 将标签键从 "clusterId" 重命名为 "automq:ClusterID",作者 @Chillax-0v0,PR #999
- refactor(s3stream): 将标签键从 "automq:ClusterID" 重命名为 "s3stream:namespace",作者 @Chillax-0v0,PR #1001
- test(s3stream/wal): 在启动时而不是初始化时检查文件存在,作者 @Chillax-0v0,PR #1004
- chore(workflow): 运行 s3stream 测试,作者 @Chillax-0v0,PR #1003
- feat(core): 优化高规格节点的块缓存性能,作者 @SCNieh,PR #1005
- fix(s3stream): 修复挂起的 fetches 修改顺序,作者 @SCNieh,PR #1008
- fix(s3stream): 暂时禁用慢读取的节流,作者 @SCNieh,PR #1009
- perf(s3stream): 重用 ObjectMapper,作者 @lifepuzzlefun,PR #1012
- chore(core): 将 "netty-tcnative-boringssl-static" 从 2.0.48 升级到…,作者 @Chillax-0v0,PR #1010
- revert(s3stream): 还原慢读取节流,作者 @SCNieh,PR #1015
- fix: 在请求管道中对事务请求进行排序以适应 KIP-890,作者 @superhx,PR #1016
- feat(auto_balancer): 使用网络带宽容量作为评分限制,作者 @SCNieh,PR #1018
- feat(s3stream): 提供额外的令牌以防止节流饥饿,作者 @SCNieh,PR #1020
关于我们
AutoMQ 是来自 Apache RocketMQ 和 Linux LVS 项目的核心团队,曾经见证并应对过消息队列基础设施在大型互联网公司和云计算公司的挑战。现在我们基于对象存储优先、存算分离、多云原生等技术理念,重新设计并实现了 Apache Kafka 和 Apache RocketMQ,带来高达 10 倍的成本优势和百倍的弹性效率提升。 🌟 GitHub 地址: https://github.com/AutoMQ 💻 官网: https://www.automq.com 👀 B 站: AutoMQ 官方账号 🔍 视频号:AutoMQ
还没有评论,来说两句吧...