Apache ZooKeeper, dağıtık sistemler için açık kaynaklı bir koordinasyon servisidir. ZooKeeper, dağıtık uygulamaların güvenilir bir şekilde çalışmasını sağlamak için kullanılır. Büyük veri dünyasında sıkça adı geçen ZooKeeper, özellikle Apache Kafka ile birlikte anılır çünkü Kafka, ZooKeeper’a oldukça bağımlıdır (en azından Kafka 3.0 öncesi sürümlerde).
ZooKeeper temel olarak şu işleri yapar:
- Yapılandırma bilgilerini tutma
- İsimlendirme (naming)
- Dağıtık senkronizasyon sağlama
- Grup servisleri sunma
Tüm bunlar yüksek performanslı, yüksek erişilebilir ve sıkı tutarlılık (strictly consistent) garantileriyle yapılır.
ZooKeeper nasıl çalışır?
ZooKeeper’a “dosya sistemi gibi ama dosya değil” diyebiliriz. ZooKeeper’da veri “znode” adı verilen hiyerarşik isim alanında tutulur. Bu yapı klasik dosya sistemine benzer ancak znode’lar hem veri tutabilir hem de çocuk znode’lara sahip olabilir. Her znode en fazla 1 MB veri tutabilir (genellikle çok daha az tutulur).
ZooKeeper servisi bir “ensemble” yani küme şeklinde çalışır. Küme genellikle 3, 5 ya da 7 sunucudan oluşur (tek sayıda olması önerilir). Bu sunucuların çoğu çalışır durumda olduğu sürece servis kullanılabilir durumdadır. Lider seçimini ve senkronizasyonu sağlayan Zab (ZooKeeper Atomic Broadcast) protokolü sayesinde kümedeki tüm sunucular aynı durumu görür.
ZooKeeper’ın temel özellikleri
- Sıralı tutarlılık (Sequential Consistency) İstemciden gelen güncellemeler, gönderildikleri sırayla uygulanır.
- Atomiklik (Atomicity) Bir işlem ya tamamen başarılı olur ya da tamamen başarısız olur; arada bir durum yoktur.
- Tek sistem görüntüsü İstemci hangi ZooKeeper sunucusuna bağlanırsa bağlansın, her zaman aynı görünümü görür.
- Yüksek güvenilirlik Veri, birden fazla sunucuda replike edilir. Bir sunucu çökse bile veri kaybolmaz.
- Yüksek performans Özellikle okuma ağırlıklı iş yüklerinde çok hızlıdır.
ZooKeeper nerelerde kullanılır?
- Dağıtık konfigürasyon yönetimi
- Lider seçimi (leader election)
- Dağıtık kilitler (distributed locks)
- Mesaj kuyruk sistemleri
- Meta veri depolama
- Hangi sunucuların hayatta olduğunu takip etme (failure detection)
En bilinen kullanım örnekleri:
- Apache Kafka (metadata ve broker koordinasyonu)
- Apache HBase (region server takibi ve master seçimi)
- Hadoop YARN (ResourceManager yüksek erişilebilirliği)
CloudKarafka’da ZooKeeper
CloudKarafka’da ZooKeeper tamamen yönetilen bir şekilde çalışır. Kullanıcıların ZooKeeper kümesini kurması, yükseltmesi, yedeklemesi ya da izlemesi gerekmez. Planınıza göre 1 veya 3 adet ZooKeeper nodu otomatik olarak sağlanır. Shared planlarda birden fazla müşteri aynı ZooKeeper kümesini güvenli ve izole bir şekilde paylaşır. Dedicated planlarda ise ZooKeeper kümesi sadece size aittir.
Özetle
Apache ZooKeeper, dağıtık sistemlerin “sinir sistemi” gibidir. Görünmez bir şekilde arka planda çalışır ve büyük ölçekli sistemlerin düzgün, koordineli ve hatasız bir şekilde çalışmasını sağlar. Özellikle Apache Kafka kullanıyorsanız, ZooKeeper’ı (ya da Kafka’nın yeni sürümlerinde KRaft modunu) çok iyi anlamak sisteminizin stabilitesi açısından çok önemlidir.