当前位置: 首页 > 工具软件 > keeper > 使用案例 >

ClickHouse-Keeper

狄海
2023-12-01

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

 类似资料: