Kafka Mimarisi

Emre Akın
3 min readNov 18, 2023

--

Bir önceki yazımda kafka nedir, avantajları, dezavantajları ve kullanım alanlarından bahsetmiştik. Şimdi de kafkanın mimarisinden ve temel komponentlerinden bahsedeceğiz. Aşağıda mimarinin genel bir çizimi bulunuyor.

Broker

Kafka sistemlerinin en temel bileşenidir. Kafka clusterda çalışan her bir sunucu/servise broker denir. Her broker birer sayıdan oluşan ID ile tanımlıdır. Fiziksel olarak kurulu oldukları sunucuya bağlıdırlar ama bir broker kendi üstünde olmasa bile clusterdaki tüm topic ve partition lardan haberdardır. Broker lar hem producer hem de consumer lar için bağlantı noktası olarak görev alırlar.

Zookeper

Özellikle büyük veri projeleri başta olmak üzere birçok açık kaynak projesinde kullanılan, dağıtık, key-value veri saklama yeteneğine sahip açık kaynaklı bir servistir. Zookeper kafka için; brokerların cluster a eklenip çıkarılması, leader/controller broker ın belirlenmesi, topic konfigurasyonlarının tutulması vb. cluster yönetimi konularında görev alır. Günümüzde kafka yeni versiyonlarında zookeeper kullanımını sona erdirdi. Fakat halihazırda kullanan sistemlerde de mevcut.

Topic

Verilerin yazıldığı anda tüm brokerlar tarafından erişilebilir olan, kafka nın veri tabanları veya message queuelarda bulunan kuyruklara benzeyen yapısıdır. Kullanıcı tarafından isimlendirilirler. Bir Kafka cluster ında binlerce topic olabilir.

Partition

Topic ler partitionlara ayrılırlar. Partition lar 0 dan başlayarak artan sayıda devam eder. Topic’de tek partition oluşturulabileceği gibi senaryoya göre bin partition da oluşturulabilir. Veri bir kez bir partition a yazıldıktan sonra bir daha değiştirilemez.
Partition lar kendi içlerinde sıralıdır. Fakat partitionlar arasında herhangi bir sıralama bulunmaz. Örneğin partition0 ve partition1 şeklinde 2 partition var. Önce message0 partition0 a sonra message1 partition1 e daha sonra da message2 partition0 a atıldı. Buradaki senaryoda message0 her zaman message2 den önce okunur. Fakat message1 in message0 dan önce ya da sonra okunmasının garantisini kafka vermez. Eğer produce ettiğiniz mesajların hangi sırada okunduğunun sizin için bir önemi yoksa mesajları farklı key ler ile produce edebilirsiniz. Fakat 2 ya da daha fazla mesajın kendi içinde bir sırasının olması sizin için önem arz ediyorsa bu mesajları aynı key ile produce etmelisiniz. Çünkü kafka aynı key ile produce edilen mesjaları aynı partition a yazar böylece sıra gözetilmiş olur. Ancak sizin için sıra önemli değilse tüm mesajları aynı key ile atmanın dezavantajı olacaktır. Çünkü kafka bunların hepsini tek bir partitiona yazacak ve yük dağılmayacaktır.

Replication

Dağıtık sistemlerin avantajlarından biri, sunuculardan biri offline olsa bile sistemin sürdürebilir durumda olmasıdır. Kafka’da da replica lar sayesinde sistemin devam etmesi ve veri kaybının önüne geçilmesi sağlanır. Replication ile topic lerin her partition u birden fazla sunucuda saklanır. Bu sunuculardan biri leader dir, diğerleri ISR (in-sync replica) denilen kopyasıdır. ISR ler veriyi senkronize eden, kopyasını tutan pasif sunuculardır, veri alışverişi leader üzerinden sağlanır. Leader ve ISR ler zookeeper tarafından belirlenir. Replication lar topic oluşturulurken replication-factor parametresi ile belirtilirler. Eğer leader ın bulunduğu sunucu down olursa zookeper ISR lerden bir tanesini leader olarak atar ve sistem kesinti yaşamadan devam eder.

Offset

Offset ler partition özelinde olup, veriler her partition a yazılırken bir identity number atanır, bu sayede veriler hem partition a yazıldığı sırayla okunabilir hem de consumer lar bir partition’da okuma yaparken hangi mesajda kaldıklarını hatırlayabilirler. Offset sayısı 0 dan başlar ver sonsuza dek devam edebilir, her mesaj yazıldığında yeni mesaja bir sonraki numara atanır. Kafka mesajlar okunduktan sonra kaybolmaz. Verilen retention time süresince tutulmaya devam eder. Bir mesaj consumer tarafında okunduktan sonra offset bir ilerletilir ve sonraki mesajdan devam eder. Belirli bir süre tutulduğu için daha önceden okunan bir mesaj tekrar okunmak istenirse offset geriye alınarak okuma işlemi tekrarlanabilir.

Bir sonraki yazımda producer ve consumer lardan bahsedeceğim.

Part 1 -> https://medium.com/@cobch7/kafka-nedir-687447d44fda

Part 3 -> https://medium.com/@cobch7/kafka-producer-ve-consumer-a99e1cb760c8

--

--