Coordination without the drawbacks
In order to overcome some shortcomings of ZooKeeper, we started building a ClickHouse native Keeper from scratch based on our own requirements, optimized for usage in ClickHouse.
Easier setup and operation
No overflow issues
Less memory used
A replacement for ZooKeeper?
Keeper is a drop-in replacement for ZooKeeper written in C++, with a fully compatible client protocol and the same data model, and features these improvements
Compatible client protocol (all clients work out of the box)
The same state machine (data model)
Better guarantees (optionally allows linearizable reads)
Uses Raft algorithm (NuRaft implementation)
Optional TLS for clients and internal communication
When to use ClickHouse Keeper?
- Most of your request are writes
- Efficient memory utilization matters
- Your project isn’t part of the Java ecosystem
- You are managing a ClickHouse cluster
When NOT to use ClickHouse Keeper?
- Most of your request are reads
- You require scalability with a read-heavy workload
- Java-based components are important to you
Keep your system afloat with RAFT
ZooKeeper is implemented in Java and its coordination algorithm, ZooKeeper Atomic Broadcast (ZAB), doesn't provide linearizability guarantees for reads.
ClickHouse Keeper Implementation
Unlike ZooKeeper, ClickHouse Keeper is written in C++ and uses the RAFT algorithm implementation. This algorithm allows linearizability for reads and writes, and has several open-source implementations in different languages.