Apache Kafka’ya Giriş — 2

Serkan Eren
Devops Türkiye☁️ 🐧 🐳 ☸️
2 min readMay 6, 2019

“Apache Kafka’ya Giriş” yazımızın ilk bölümünde broker, topic, partition, offsets, producer, consumer ve consumer group kavramlarını açıklamıştık.

Consumer Offsets

Kafka, consumer offset bilgilerini “__consumer_offsets” topic içerisinde tutar. Consumer, Kafka topic’ten mesajı okur, mesajı işler ve mesajın offset değerini “__consumer_offsets” topic’ine yazar. Offset bilgilerininin topic’e yazılma işlemi consumer tarafından otomatik yapılır yada programlanabilir. Bir consumer kaybedilse bile, tekrar ayağa kalktığında “__consumer_offsets” içerisinde en son hangi mesajı okuduğu kayıtlı olduğu için kaldığı yerden devam edebilir.

Message Delivery Semantics

Consumer’ların offset bilgilerini ne zaman yazacağına göre değişen, Kafka tarafından sağlanan 3 farklı mesaj teslim garantisi vardır.

At most once: Offset bilgisi mesaj alınır alınmaz yazılır. Mesaj, işlenmesi sırasında bir hata oluşursa kaybedilir. En performanslı ama mesaj kaybı söz konusu olabileceği için pek tercih edilen bir yöntem değildir.

At least once: Offset bilgisi mesaj işlendikten sonra yazılır. Mesaj, işlenmesi sırasında bir hata oluşursa tekrar okunur. Mesaj kaybı oluşmaz ama birden fazla mesajları okuma olasılığı vardır. Bu nedenle mesaj işleme sürecimiz idempotent olmalıdır yani duplike durumlarında sistemimiz etkilenmemelidir. En çok tercih edilen yöntemdir.

Exactly once: Bu model sadece Kafka - Kafka arasındaki iş akışlarında Kafka Streams API ile sağlanıyor. Mesaj, Kafka topic’ler arasında transfer olurken ve işlenirken transactional producer ve consumer kullanılıyor.

Kafka Broker Discovery

Yazımızın ilk bölümünde, producer ve comsumer’lar için cluster içerisindeki hangi broker’a yazacağını veya hangi broker’dan okuyucağını bildiklerini belirtmiştik. Cluster içerisindeki her Kafka broker aslında bir “Bootstrap Server” dır. Diğer broker, topic ve partition bilgilerini bilir ve bir consumer veya producer kendisine bağlandığında bu bilgileri paylaşır. Bu bilgiler metadata olarak adlandırılır. Yani, bir Kafka broker’a bağlanmak tüm Kafka cluster’ına bağlanmak anlamına gelir.

Zookeeper

Kafka broker’larını yönetir. Topic partition’ları için broker lider seçiminine yardımcı olur. Yeni bir broker ayağa kalktığında veya düştüğünde, topic oluşturulduğunda veya silindiğinde, Zookeeper Kafka broker’lara bildirim gönderir. Kafka, ayağa kalkmak için Zookeeper’a ihtiyaç duyar. Bu nedenle önce Zookeeper, sonra Kafka broker ayağa kaldırılır. Kural olarak cluster içerisindeki Zookeeper sayısı tek sayı olmalıdır. Bir lider ve takipçileri vardır. Kafka, cluster içerisindeki herhangi bir Zookeeper’a bağlanması yeterlidir.

Kafka neleri garanti ediyor?

Mesajlar, topic partition’a gönderildiği sırada eklenir.

Consumer’lar, mesajları topic partition’dan saklandığı sırada okur.

Kafka, replication factor N parametresi ile ayağa kaldırıldı ise, producer ve consumer’lar N-1 Kafka broker’a kalana kadar çalışmaya devam ederler. Replication factor için 3 uygun bir seçenek olacaktır. Bir Kafka broker bakım için, bir broker beklenmedik bir hata durumu kapsamında ayakta olmayabilir. Bu durumda tek bir Kafka broker ile o topic işlemleri devam ediyor olacaktır.

Aynı mesaj anahtarına sahip kayıtlar, aynı topic partition’a yazılır.

Kaynak:

  1. https://kafka.apache.org/

--

--