ClickHouse-Keeper 是什么:
ClickHouse 社区在 21.8 版本中开始引入了 ClickHouse-Keeper ,直至 ClickHouse 21.12 发布公告提到 ClickHouse Keeper 功能基本完成。ClickHouse Keeper 是 ZooKeeper 的替代品,与 ZooKeeper 不同,ClickHouse Keeper 是用 C++ 编写的,并使用 RAFT 算法实现,该算法允许对读写具有线性化能力。
实现细节
ZooKeeper最早的非常著名的开源协调系统之一. 它是通过Java语言实现的, 有一个相当节点和强大的数据模型. ZooKeeper的协调算法叫做 ZAB (ZooKeeper Atomic Broadcast) zk不能保证读取的线性化, 以为每个zk节点服务都是通过本地线性读的. ClickHouse Keeper是通过C++写的,和zookeeper不一样, ClickHouse Keeper使用的RAFT algorithm implementation算法. 这个算法允许线性读和写, 已经有几种不同的语言的开源实现.
ClickHouse Keeper 默认提供了一些保证和ZooKeeper是一样的 (线性写, 非线性读)和. clickhouse keeper有一个兼容的客户端服务端协议, 所以任何标准的zookeeper客户端都可以用来与clickhouse keeper进行交互. 快照和日志的格式与ZooKeeper不兼容, 但是通过clickhouse-keeper-converter 允许转换 ZooKeeper 数据到 ClickHouse Keeper 快照. ClickHouse Keeper的interserver协议和zookeeper也不兼容,所以ZooKeeper / ClickHouse Keeper 混合部署集群是不可能的.
Zookeeper与ClickHouse-Keeper一些场景对比
为什么要引入 ClickHouse-Keeper 呢?主要是 ClickHouse 使用 Zookeeper 有着众多痛点:
- 使用java开发
- 运维不便
- 要求独立部署
- zxid overflow 问题
- snapshot 和 log 没有经过压缩
- 不支持读的线性一致性
而 ClickHouse-Keeper 存在着以下优点:
- 使用 C++ 开发,技术栈与 ClickHouse 统一
- 即可独立部署,又可集成到 ClickHouse 中
- 没有 zxid overflow 问题
- 读性能更好,写性能相当
- 支持对 snapshot 和 log 的压缩和校验
- 支持读写的线性一致性
HouseKeeper Vs Zookeeper
- Zookeeper java 开发,有 JVM 痛点,执行效率不如 C++;Znode 数量太多容易出现性能问题,Full GC 比较多。
- Zookeeper 运维复杂,需要独立部署组件,之前出问题比较多。HouseKeeper 部署形态比较多,可以 - standalone 模式和集成模式。
- Zookeeper ZXID overflow 问题,HouseKeeper 没有该问题。
- HouseKeeper 读写性能均有提升,支持读写线性一致性,关于一致性的级别参见- xzhu0027.gitbook.io/blog/misc/i…
- HouseKeeper 代码与 CK 统一,自主闭环可控。未来可扩展能力强,可以基于此做 MetaServer 的设计开发。主流的的 MetaServer 基本都是 Raft+rocksDB 的组合,可以借助该 codebase 进行开发。
作者:阿里云云栖号
链接:https://juejin.cn/post/7044736272165765134
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
通俗易懂 强一致性、弱一致性、最终一致性、读写一致性、单调读、因果一致性 的区别与联系
https://zhuanlan.zhihu.com/p/358585758
https://zhuanlan.zhihu.com/p/67949045