开源方案面临的挑战
Apache Kafka 一直以来在数据自平衡方面都面临了很大的挑战,社区有两种解决方案:- Apache Kafka 官方提供了分区迁移工具,但具体的迁移计划则需要运维人员自行决定,而对于动辄成百上千个节点规模的 Kafka 集群来说,人为监控集群状态并制定一个完善的分区迁移计划几乎是不可能完成的任务,
- 社区也有诸如 Cruise Control[1] 这类第三方外置插件用于辅助生成迁移计划。但由于 Apache Kafka 的数据自平衡过程中涉及到大量变量的决策(副本分布、Leader 流量分布、节点资源利用率等等),以及数据自平衡过程中由于数据同步带来的资源抢占和小时甚至天级的耗时,现有解决方案复杂度较高、决策时效性较低,在实际执行数据自平衡策略时,还需依赖运维人员的审查和持续监控,无法真正解决 Apache Kafka 数据自平衡带来的问题
AutoMQ 的架构优势
得益于 AutoMQ 对云原生能力的深度应用,我们将 Apache Kafka 的底层存储完全基于云的对象存储进行了重新实现,彻底从 Shared Nothing 架构升级为了 Shared Storage 架构,支持了秒级的分区迁移能力。因此,分区迁移计划的决策因素得到了极大的简化:- 无需考虑节点的磁盘资源。
- 无需考虑分区的 Leader 分布和副本分布。
- 分区的迁移不涉及数据同步和拷贝。
AutoMQ 数据自平衡实现

AutoMQ 数据自平衡示例

NOTE:在该场景中,为便于观测,人为增加了分区调度冷却时间,在使用默认配置的情况下,流量均衡时间约为 1 分钟左右