ClickHouse Keeper:Apache Zookeeper 的替代品
ClickHouse 项目团队开发了一个名为 ClickHouse Keeper 的替代方案,以取代 Apache Zookeeper。这一决策源于 Zookeeper 在某些方面的不足,以及对更高效实现的需求。ClickHouse Keeper 不仅是 ClickHouse 项目的重要组成部分,还可以独立用于多种分布式协调场景。
背景与动机
ClickHouse 是一个开源的实时分析数据库系统,采用列式存储。最初,ClickHouse 使用 Apache Zookeeper 作为其控制平面的协调机制,用于管理元数据和同步分布式操作。尽管 Zookeeper 提供了强大的 API 和合理的性能,但随着时间的推移,团队发现其存在效率低下和缺乏线性化读取等关键功能的问题。
开发 ClickHouse Keeper 的原因
ClickHouse Keeper 的开发主要由以下原因驱动:
- 技术栈不匹配:Zookeeper 是一个基于 Java 生态的项目,与 ClickHouse 主要使用 C++ 的技术栈不兼容。
- 资源使用和操作挑战:随着规模的扩大,Zookeeper 在资源使用和操作方面的挑战日益凸显。
- 功能需求:ClickHouse 项目需要解决 Zookeeper 的不足,并满足额外的需求。
ClickHouse Keeper 的发展历程
- 2021 年 2 月:ClickHouse Keeper 作为嵌入式服务在 ClickHouse 中首次实现。
- 2021 年底:引入独立模式。
- 2022 年 4 月:宣布 ClickHouse Keeper 已准备好用于生产环境,并在 ClickHouse Cloud 中大规模使用。
架构与功能
ClickHouse Keeper 在 ClickHouse 中广泛用于需要强一致性的场景,包括存储元数据、复制、备份、访问控制、任务调度以及用于数据摄取的高一致性键值存储。Keeper 依赖于 Raft 共识算法,而非 Zookeeper 使用的 ZAB 算法。Raft 因其相对简单且易于在 C++ 库中集成而被选用。
未来计划
团队计划引入多组 Raft 实例,以提升可扩展性。这一方法需要数据分区,并解决一些挑战,以避免浪费计算和网络资源,并确保在所有情况下事务处理的正确性。
性能基准测试
团队创建了性能基准测试套件,用于比较 ClickHouse Keeper 与 Apache Zookeeper 的性能。在相同基础设施上对两个最新版本进行测试,结果显示,ClickHouse Keeper 在处理相同数量请求时,内存使用量约为 Zookeeper 的 1/46。
总结
ClickHouse Keeper 是一个为满足 ClickHouse 项目特定需求而开发的高效分布式协调系统,不仅解决了 Zookeeper 的不足,还提供了更高的性能和更强的功能。其未来的发展将进一步提升可扩展性和性能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。