Kurs
Bölümler, Kafka'nın dağıtık mimarisi içinde yer alan ve Kafka'nın yatayda ölçeklenmesini sağlayan, verilerin verimli bir şekilde paralel işlenmesine olanak tanıyan temel bileşenlerdir. Kafka kümesi genelinde verileri düzenlemek ve dağıtmak için yapı taşlarıdır.
Onları, iletilerin saklandığı bir konu (topic) içindeki ayrı kanallar olarak düşünebilirsiniz. Her bölüm, hata toleransı ve veri yedekliliğini garanti altına almak için farklı broker'lar arasında dağıtılmış birden fazla kopyaya (replika) sahip olabilir.
Ayrıca, bölümler sıralama garantileri sunar; bir bölüm içindeki iletilerin üretildikleri sırayla işlenmesini sağlar. Bu da Kafka bölümlerini, gerçek zamanlı veri işleme senaryolarında kritik öneme sahip veri bütünlüğü ve tutarlılığını korumada etkili kılar.
Bu yazıda şu başlıklara daha yakından bakacağız:
- Kafka mimarisinin temelleri
- Bölümlerin Kafka'da neden önemli olduğu
- Bölüm (Partition) kurulumları
- İleri seviye bölüm yönetimi
- Yaygın bölüm sorunlarını giderme
Daha detaylı bir karşılaştırma için Kafka ve SQS karşılaştırmamıza göz atabilirsiniz.
Kafka Mimarisi Temelleri

Kafka mimarisine genel bakış - Kaynak
Apache Kafka, yüksek aktarım hızı, hata toleransı ve ölçeklenebilirlik için tasarlanmış açık kaynaklı, dağıtık bir akıș platformudur ve gerçek zamanlı veri hatları ve uygulamaları oluşturmak için popüler bir tercihtir.
Kafka'nın çekirdeğinde birden çok bileşen bulunur. Bu bileşenler üreticiler (producer), tüketiciler (consumer), broker'lar, konular (topic) ve bölümleri içerir; her biri tüm sistemde kritik bir rol oynar.
- Üreticiler, veriyi oluşturmaktan ve Kafka konularına göndermekten sorumludur. Genellikle anahtar-değer formatında iletileri Kafka broker'larına yayınlarlar.
- Broker'lar, Kafka konularını depolayan ve yöneten sunuculardır. Üreticiler ve tüketiciler arasındaki veri çoğaltmayı, dağıtımı ve iletişimi yürütürler.
- Konular (Topics), Kafka içinde mantıksal kategoriler veya veri akışlarıdır. Üreticilerin veriyi yayınladığı, tüketicilerin ise aldığı mesaj kuyrukları gibi davranırlar.
- Bölümler (Partitions), Kafka konuları içinde veri depolamanın ve dağıtımın temel birimidir.
- Tüketiciler, veriyi almak ve işlemek için Kafka konularına abone olan uygulama veya süreçlerdir. Bir veya daha fazla bölümden ileti okurlar ve yük dengeleme ile paralel işlem için tüketici grupları hâlinde yapılandırılabilirler.
Kafka Bölümlerinin Önemi
Bölümler, Kafka'nın verimliliğini ve dayanıklılığını şekillendirmede kilit rol oynar. Verilerin Kafka broker'ları arasında dağıtılmasını kolaylaştırarak yatayda ölçeklenmeyi mümkün kılarlar.
Konuları bölümlere ayırarak Kafka, veri işleme iş yüklerini birden çok sunucuya yayabilir; bu da kaynakların verimli kullanılmasını sağlar ve artan veri hacimlerinin tek tek broker'ları aşırı yüklemeden karşılanmasına imkân verir.
Ayrıca bölümler, veri işlemeye paralellik de kazandırır. Tüketiciler, birden fazla bölümden eşzamanlı olarak okuyabilir; bu da hesaplama yükünü dağıtarak verimi artırır. Bu paralel veri tüketimi, tüketici kaynaklarının verimli kullanımını sağlar ve veri işleme hatlarında gecikmeyi azaltır.
Bölümlerin Kafka'da önemli olmasının bir başka nedeni de platformun hata toleransına katkı sağlamalarıdır. Her bölüm, farklı broker'lara dağıtılmış birden fazla kopyaya sahip olabilir. Bir broker arızasında Kafka, diğer broker'larda barındırılan kopyalardan veri sunmaya devam ederek veri kullanılabilirliğini ve güvenilirliğini sağlar.
Özetle, bölümler birden fazla nedenle önemlidir. Kafka mimarisinin vazgeçilmezidir ve ölçeklenebilirlik, hata toleransı, paralellik ve veri tutarlılığını mümkün kılmada belirleyici bir rol oynar.
Kafka Bölümlerini Kafka Nasıl Yönetir
Yazının önceki kısımlarında belirtildiği gibi, her bölüm, dilimlenmiş, sıralı ve değişmez bir kayıt dizisi olarak davranır. Bir üretici Kafka'ya veri gönderdiğinde, bu verinin bir konu içindeki hangi bölüme yazılacağını belirlemek için bölümleme mantığı kullanır.
Bu mantık, veriye iliştirilen bir anahtar gibi çeşitli faktörlere veya üretici tarafından uygulanan özel bir bölümleyiciye (partitioner) dayanabilir. Bölüm belirlendikten sonra Kafka, veriyi bölümün sonuna ekler ve iletilerin sıralamasını ofsetlerine göre korur.
Dahili olarak Kafka broker'ları, bölüm verisinin depolanmasını ve çoğaltılmasını yönetir. Hata toleransı sağlamak için her bölüm, farklı broker'lar arasında dağıtılmış birden fazla kopyaya sahip olabilir.
Lider-izleyici modeli kullanılır: Bir broker, bölüm için okuma ve yazma isteklerini karşılamaktan sorumlu lider olarak görev yaparken, diğer broker'lar liderden veriyi çoğaltan izleyiciler olarak davranır. Bu kurulum, broker arızaları durumunda bile veri dayanıklılığını ve erişilebilirliğini güvence altına alır.
Kafka Bölümlerini Kurma
Bir Kafka bölümü kurmadan önce, Apache Kafka ve Zookeeper'ın yerel makinenize kurulmuş, yapılandırılmış ve çalışır durumda olduğundan emin olun. Bu, en iyi uyumluluk için önerilir. Ayrıca Java 8 veya daha yeni bir sürümün kurulu ve çalışır durumda olduğunu kontrol edin.
Not: Kafka, Windows üzerinde kurulduğunda, bu işletim sistemiyle yerel uyumluluğun olmaması nedeniyle çeşitli sorunlarla karşılaşabilir. Bu nedenle Windows'ta Apache Kafka'yı başlatmak için aşağıdaki yöntemlerin kullanılması önerilir:
- Windows 10 veya daha yenisi için WSL2 veya Docker kullanmayı düşünün
- Windows 8 veya daha eski sürümler için Docker kullanın
Kafka'yı Windows'ta JVM üzerinden çalıştırmak önerilmez; çünkü Linux'a özgü bazı POSIX özellikleri bulunmaz. WSL2 olmadan Windows'ta Kafka'yı çalıştırmaya çalışmak, zamanla sorunlara yol açabilir.
Apache Kafka kurulumuyla ilgili daha fazla bilgiyi Yeni Başlayanlar için Apache Kafka: Kapsamlı Rehber yazımızda bulabilirsiniz.
İşte bölümleri kurmak için adım adım bir rehber:
Adım 1: Zookeeper'ı başlatın
Komut istemcisini açın ve kök Kafka dizinine gidin. Oradayken Zookeeper'ı başlatmak için aşağıdaki komutu çalıştırın:
bin/zookeeper-server-start.sh config/zookeeper.properties
Adım 2: Kafka sunucusunu başlatın
Başka bir komut istemcisi açın ve Apache Kafka'yı başlatmak için Apache Kafka'nın kök dizininden aşağıdaki komutu çalıştırın:
.\bin\windows\kafka-server-start.bat .\config\server.properties
Adım 3: 3 bölümlü bir konu oluşturun
Üç bölümlü bir konu oluşturmak için kök Kafka dizininden yeni bir komut istemcisi başlatın ve şu komutu çalıştırın:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic my_topic
Bu komut, “my_topic” adlı yeni bir Kafka konusu oluşturacaktır.
Not: Doğru oluşturulduğunu doğrulamak için komut çalıştırıldığında “Create topic <name of topic>.” çıktısını döndürecektir.
Konunun doğru şekilde oluşturulduğunu doğrulamak için şunu çalıştırabilirsiniz:
bin/kafka-topics.sh --list --zookeeper localhost:2181
Beklenen çıktı:
my_topic
İleri Seviye Bölüm Yönetimi
Mevcut konuların yeniden bölümlendirilmesi
Kafka'da mevcut konuların yeniden bölümlendirilmesi, değişen veri hacimlerini karşılamak, paralelliği artırmak veya kaynak kullanımını optimize etmek için gerekli olabilecek bölüm sayısını değiştirmeyi içerir.
Mevcut konuları yeniden bölümlendirmek için bazı teknikler ve dikkat edilmesi gerekenler şunlardır:
Bölüm sayısını değiştirme
- Mevcut bir konunun bölüm sayısını artırmak için
kafka-topics.sh --alterkomutunu kullanın. Bu, veriyi yeni bölümler arasında yeniden dağıtır. - Bölüm sayısını azaltmak daha karmaşıktır ve birden fazla bölümden veriyi daha az bölüme konsolide etmek için veri taşımayı veya yeniden işlemeyi gerektirebilir.
Veri yeniden dağıtımı
- Maksimum paralellik ve kaynak kullanımı için verinin bölümler arasında dengeli dağılmasını hedefleyin.
- Veri dağılımını düzenli olarak izleyin; orantısız veri miktarına sahip bölümleri belirleyin ve düzeltici adımlar atın.
Tüketicilere etkisi
- Yeniden bölümlendirme, özellikle tüketiciler iş yükü dağıtımı için bölüm atamalarına güveniyorsa, tüketici gruplarını etkileyebilir. Gerekli ayarlamalar için tüketici grubu yapılandırmalarını planlayın.
Veri saklama ve dayanıklılık
- Veri kaybını veya tutarsızlığı önlemek için yeniden bölümlendirme sırasında veri saklama politikalarının korunduğundan emin olun.
- Yeniden bölümlendirme, veri dayanıklılığını veya erişilebilirliğini zayıflatmamalıdır. Süreç boyunca kopyalar uygun şekilde korunmalıdır.
Uçuş hâlindeki veriyi yönetme
- Yeniden bölümlendirme, uçuş hâlindeki verinin farklı bölümlere yönlendirilmesine neden olabilir. Üreticilerin ve tüketicilerin bu senaryoyu sorunsuzca yönetebildiğinden emin olun.
Test ve doğrulama
- Üretimde değişiklik uygulamadan önce yeniden bölümlendirmenin veri işleme ve tüketici davranışı üzerindeki etkisini doğrulamak için bir hazırlık (staging) ortamında işlemleri gerçekleştirin.
- Yeniden bölümlendirme sırasında ve sonrasında Kafka kümesi performansını izleyin; sorunları tespit edin ve en iyi performansı sağladığınızdan emin olun.
Bölüm dengeleme ve optimizasyonu
Kafka'da bölüm kullanımını ve performansını optimize etmek; verimli veri işleme, kaynak kullanımı ve genel sistem ölçeklenebilirliği için kritik öneme sahiptir.
Bölüm dengeleme ve optimizasyonu için bazı stratejilere bakalım:
En uygun bölüm sayısı
- Veri hacmi, aktarım gereksinimleri ve küme kaynaklarına göre en uygun bölüm sayısını belirleyin. Çok az veya çok fazla bölüm oluşturmaktan kaçının.
- Veri hacimleri ve işleme gereksinimleri geliştikçe bölüm sayısını periyodik olarak yeniden değerlendirin.
Tüketici grubu yapılandırmaları
- Maksimum paralellik ve iş yükünün tüketiciler arasında eşit dağılması için tüketici grubu bölümlerinin konu bölümleriyle hizalı olduğundan emin olun.
- Tüketici grubu yeniden dengeleme ayarlarını düzenleyin: Yeniden dengeleme sırasındaki kesintileri en aza indirmek ve kaynak kullanımını optimize etmek için ayarları ince ayar yapın.
Üretici bölümleme stratejileri
- İlgili iletilerin tutarlı bir şekilde aynı bölüme yönlendirilmesini sağlamak, sıralamayı korumak ve verimli veri işlemeyi mümkün kılmak için anahtar tabanlı bölümlemeyi kullanın.
- Yük dengeleme amacıyla iletileri bölümlere rastgele atamayı değerlendirerek iş yükünü broker'lar arasında eşit dağıtın.
İzleme ve ayarlama
- Bölüm kullanımı, aktarım hızı, gecikme ve kaynak kullanımıyla ilgili Kafka kümesi metriklerini sürekli izleyin.
- Yığın (heap) boyutu, arabellek boyutları ve iş parçacığı havuzları gibi Kafka broker yapılandırmalarını ayarlayarak performansı optimize edin ve iş yükü sıçramalarını etkin şekilde yönetin.
Yatay ölçekleme ve donanım yükseltmeleri:
- Bölüm kopyalarını dağıtmak ve genel aktarım hızı ile hata toleransını artırmak için Kafka kümesine daha fazla broker ekleyin.
- Kafka kümesi performansını iyileştirmek ve daha yüksek veri hacimlerini karşılamak için CPU, bellek ve depolama gibi donanım kaynaklarını yükseltmeyi değerlendirin.
Yaygın Bölüm Sorunlarını Giderme
Kafka, birçok veri yoğun uygulamanın belkemiği hâline geldi; ancak Spider-Man'deki Amca Ben'in sözleriyle oynayacak olursak, büyük güç, karmaşık zorluklara daha yüksek bir potansiyel de getirir.
Kafka kullanırken çeşitli yaygın bölüm sorunlarıyla karşılaşılabilir. Bunun nedeni yanlış yapılandırmalar, kaynak kısıtları, dengesiz veri dağılımı veya başka etkenler olabilir.
Bu bölümde yaygın bölüm sorunlarına daha yakından bakacak ve nasıl çözülebileceklerini tartışacağız.
Dengesiz veri dağılımı
Veri bölümler arasında dengesiz dağıtıldığında, bazı bölümler sıcak noktalar hâline gelebilir; bu da dengesiz kaynak kullanımı ve olası performans darboğazlarına yol açar. Bunu önlemenin yolu, Kafka Manager veya Confluent Control Center gibi Kafka'nın izleme araçlarıyla veri dağılımını sürekli izlemektir. Ayrıca, daha dengeli dağılımlar elde etmek için özel bir bölümleme stratejisi uygulamayı veya bölüm sayısını artırmayı değerlendirin.
Büyük bölüm boyutu
Bir bölüm zamanla büyük miktarda veri biriktirdiğinde, veri alma ve işleme sırasında performans düşüşüne ve artan gecikmeye neden olabilir.
Bu sorunu çözmenin anahtarı, bölüm boyutunu düzenli olarak izlemek ve veriyi daha dengeli dağıtmak için büyük bölümleri daha küçük parçalara ayırmaktır. Ayrıca, bölümlerde depolanan veri miktarını kontrol etmek için saklama politikalarını ayarlamak faydalı olur.
Yetersiz çoğaltılan bölümler
Yetersiz çoğaltılan bölümler, broker arızaları veya ağ sorunları karşısında senkron kopya (ISR) sayısının yapılandırılmış minimumun altına düşmesiyle ortaya çıkar.
Bunu önlemek için bölümlerin çoğaltma durumunu izleyin ve yetersiz çoğaltılan bölümleri araştırın. İstenen hata toleransı seviyesini korumak için çoğaltma faktörünün uygun şekilde yapılandırıldığından emin olun. Ağ bağlantısı veya broker arızalarına ilişkin sorunları vakit kaybetmeden giderin.
Bölüm lideri dengesizliği
Bölüm liderleri, bir Kafka kümesinde okuma ve yazma isteklerini işler. Broker'lar arasında bölüm liderlerinin dengesiz dağılması, dengesiz kaynak kullanımı ve olası performans sorunlarına yol açabilir.
Bunu önlemek için Kafka Manager veya Confluent Control Center ile bölüm lideri dağılımını izleyin ve gerekirse liderleri yeniden dengeleyin. Ayrıca, bölüm liderlerini broker'lar arasında eşit dağıtmak için broker yapılandırmalarını ayarlamayı değerlendirin.
Bölüm çarpıklığı (skew)
Bölüm çarpıklığı, bazı bölümlerin diğerlerine kıyasla orantısız derecede yüksek trafik almasıyla oluşur; bu da dengesiz kaynak kullanımı ve olası performans düşüşüne neden olur. Bu yüzden trafik kalıplarını analiz etmek önemlidir.
Veriyi bölümler arasında eşit dağıtmak için özel bir bölümleme stratejisi uygulamayı ve iş yükünü tüketiciler arasında dengeli dağıtmak için tüketici grubu yapılandırmalarını optimize etmeyi düşünün.
Sonuç
Apache Kafka, sayısız veri yoğun uygulamanın belkemiği olarak hizmet veren sağlam bir dağıtık akış platformudur. Merkezinde, Kafka konuları içinde veriyi düzenlemek ve dağıtmak için temel birimler olan bölümler kavramı yer alır. Bölümler, Kafka ekosisteminde ölçeklenebilirlik, hata toleransı, paralellik ve verimli veri işlemenin sağlanmasında belirleyici öneme sahiptir.
Veriyi birden çok broker'a dağıtarak bölümler, Kafka'nın yüksek veri hacimlerini yüksek aktarım hızı ve güvenilirliği koruyarak işlemesini sağlar. Ayrıca bölümler, paralel veri işlemeyi kolaylaştırır; böylece kaynak kullanımı optimize edilir ve gecikme azalır.
Sonuç olarak, bölümleri anlamak ve etkin bir şekilde yönetmek, Kafka kümelerinin performansını ve güvenilirliğini en üst düzeye çıkarmak için kritiktir; bu da bölümleri, ölçeklenebilir ve dayanıklı gerçek zamanlı veri hatları ve uygulamaları oluşturmanın vazgeçilmez bileşenleri yapar.
Öğrenmeye devam etmek için bazı kaynaklar:
Kafka Bölümleri SSS
Apache Kafka'nın kaç bölümü vardır?
Apache Kafka'nın ön tanımlı bir bölüm sayısı yoktur. Kafka konularındaki bölüm sayısı yapılandırılabilir ve ölçeklenebilirlik ihtiyaçları, tüketici paralelliği, çoğaltma gereksinimleri ve iş yükü özellikleri gibi faktörlere bağlı olarak değişebilir. Yöneticiler veya geliştiriciler, kendi kullanım senaryolarına uygun şekilde performansı ve kaynak kullanımını optimize etmek için bölüm sayısını ayarlayabilir.
Kafka'da kaç bölüme sahip olmalıyım?
Kafka'da ideal bölüm sayısı, özel kullanım durumunuza, ölçeklenebilirlik gereksinimlerinize ve kaynak kısıtlarınıza bağlıdır. Genel olarak, aktarım hızı, paralellik ve hata toleransı arasında bir denge hedefleyin. Temkinli bir sayıyla başlayın ve performansı yakından izleyin; gerekirse tüketici paralelliği, çoğaltma ve broker kaynakları gibi faktörleri dikkate alarak uygulamanızın taleplerini karşılamak için kademeli olarak artırın.
Kafka'da birden çok bölümün kullanım amacı nedir?
Birden çok bölüm kullanmanın amacı, yüksek kullanılabilirlik, ölçeklenebilirlik ve verimli veri işlemeyi sağlamaktır. Daha spesifik olmak gerekirse, şu konularda yardımcı olurlar:
- Ölçeklenebilirlik: Veriyi birden çok broker'a dağıtarak yatayda ölçeklemeyi mümkün kılar; daha yüksek aktarım hızı ve paralel işlem olanağı sağlar.
- Paralellik: Her bölüm, bir tüketici grubundaki bir tüketici tarafından tüketilebilir; bu da veri akışlarının paralel işlenmesini sağlayarak genel sistem performansını iyileştirir.
- Hata Toleransı: Bölümlerin broker'lar arasında çoğaltılması, veri dayanıklılığı ve hata toleransı sağlar. Bir broker arızalanırsa, diğer kopyalar devralarak verinin kesintisiz erişilebilirliğini güvence altına alır.
Yük Dengeleme: Veriyi bölümler arasında dağıtmak, iş yükünün broker'lar arasında dengelenmesine yardımcı olur; sıcak noktaları önler ve kaynak kullanımını optimize eder.

