Tüm Ürünler
Search
Belge Merkezi

ApsaraMQ for Kafka:Client parameter configuration

Son Güncelleme:Oct 06, 2026

Bu konu, ApsaraMQ for Kafka için istemci parametrelerinin nasıl yapılandırılacağını açıklar. Doğru yapılandırılmış parametreler; mesaj aktarım hızını, teslim güvenilirliğini ve tüketici kararlılığını doğrudan etkiler. Aşağıdaki bölümler, üretim iş yükleri için önerilen değerler ve ayarlama kılavuzlarıyla birlikte üretici ve tüketici parametrelerini kapsar.

Üretici parametreleri

Mesaj teslimi

acks

Üreticinin bir gönderimi başarılı saymadan önce broker'dan kaç onay beklemesi gerektiğini kontrol eder.

Değer Davranış Ödünleşim
0 Broker'dan onay alınmaz. En yüksek aktarım hızı, en yüksek veri kaybı riski.
1 Lider düğüm veriyi yazdıktan sonra onay verir. Dengeli aktarım hızı ve kalıcılık. Lider, takipçiler veriyi çoğaltmadan önce arızalanırsa veri kaybı yaşanabilir.
all Lider ve eş zamanlı olarak senkronize olan tüm çoğaltmalar veriyi yazdıktan sonra onay verir. En düşük aktarım hızı, en güçlü kalıcılık. Veri kaybı yalnızca lider ve eş zamanlı olarak senkronize olan tüm çoğaltmalar aynı anda arızalandığında gerçekleşir.

Önerilen değer: Sıkı kalıcılıktan ziyade aktarım hızına öncelik veren çoğu iş yükü için 1.

retries

Üreticinin başarısız bir gönderimi yeniden deneme sayısı üst sınırı. Daha yüksek bir değer, üreticinin lider seçimi gibi geçici broker arızalarından kurtulmasına yardımcı olur. Yeniden deneme hızını kontrol etmek için retry.backoff.ms ile birlikte kullanın.

retry.backoff.ms

Gönderim yeniden denemeleri arasındaki bekleme süresi. Çok düşük bir değer, broker yük devretmeleri sırasında yeniden deneme fırtınalarına neden olabilir.

Önerilen Varsayılan Birim
1000 -- milisaniye

Toplu işleme ve aktarım hızı

Toplu işleme, birden fazla kaydı tek bir istekte birleştirerek ağ ek yükünü azaltır. Bir toplu işin ne zaman gönderileceğini iki parametre kontrol eder: boyut ve süre.

batch.size

Bölüm başına tek bir toplu işin maksimum boyutu. Bir toplu iş bu boyuta ulaştığında, üretici bunu hemen gönderir.

Tür Varsayılan Geçerli değerler Birim
int 16384 [0,...] bayt

Çoğu iş yükü için 16384 varsayılan değerini koruyun. Daha küçük bir değer ağ isteği sayısını artırır ve aktarım hızını düşürür. batch.size değerini artırırsanız, daha büyük toplu işleri karşılayacak kadar buffer.memory alanının yeterli olduğundan emin olun.

linger.ms

Üreticinin bir toplu işi göndermeden önce doldurması için beklediği maksimum süre. Bu, TCP'deki Nagle algoritması gibi çalışır: bir toplu iş batch.size değerine ulaştığında, bekleme zamanlayıcısından bağımsız olarak hemen gönderilir. linger.ms süresi dolduğunda toplu iş hâlâ batch.size değerinin altındaysa, üretici birikmiş olanları gönderir.

Önerilen Varsayılan Birim
100 ila 1000 0 milisaniye

Daha yüksek bir linger.ms değeri, mesaj başına gecikme süresi pahasına toplu iş verimliliğini ve aktarım hızını artırır.

Bellek yönetimi

buffer.memory

Üreticinin, tüm bölümlerdeki gönderilmemiş kayıtları arabelleğe almak için ayırdığı toplam bellek miktarı. Bu havuz tükenirse, max.block.ms değerine bağlı olarak send() işlemi engellenir veya bir özel durum oluşturur. Yetersiz boyutlandırılmış bir arabellek yavaş bellek tahsisine, azalan aktarım hızına veya gönderim zaman aşımlarına neden olur.

Birim: bayt. Varsayılan: 33554432 (32 MB).

Boyutlandırma formülü:

buffer.memory >= batch.size x number_of_partitions x 2

Örneğin, batch.size=16384 ve 50 bölüm durumunda:

16384 x 50 x 2 = 1,638,400 bytes (~1.6 MB minimum)

Aktarım hızı için batch.size değerini artırırsanız, buffer.memory değerini de orantılı olarak ölçeklendirin.

Bölümleme

partitioner.class

Üreticinin kayıtları bölümlere nasıl atadığını belirler. Yapışkan bölümleme stratejisi, bir sonraki bölüme geçmeden önce bir bölümün toplu işini doldurarak tamamlanmamış toplu iş sayısını azaltır.

Kafka istemci sürümü Varsayılan strateji
2.4 ve sonrası Yapışkan bölümleme (varsayılan)
2.4'ten önce Döngüsel (Round-robin)

Üretici istemciniz 2.4 sürümünden önceyse, toplu iş verimliliğini artırmak için yapışkan bölümleyiciyi açıkça ayarlayın.

Tüketici parametreleri

Getirme ayarlaması

Bu parametreler, tüketicinin getirme isteği başına ne kadar veri aldığını kontrol eder. Bunların ayarlanması hem aktarım hızını hem de gecikme süresini etkiler.

fetch.min.bytes

Broker'ın bir getirme yanıtı döndürmeden önce biriktirdiği minimum veri miktarı. Daha büyük bir değer getirme sıklığını ve broker CPU ek yükünü azaltarak aktarım hızını iyileştirir, ancak uçtan uca mesaj gecikme süresini artırır. Birim: bayt.

Bu değeri ayarlamadan önce üreticinizin mesaj hızını değerlendirin. Mesajlar yavaş geliyorsa, büyük bir fetch.min.bytes değeri gereksiz gecikmeye neden olur.

fetch.max.wait.ms

Broker'ın bir yanıt döndürmeden önce fetch.min.bytes değerini biriktirmek için beklediği maksimum süre. Birim: milisaniye.

Davranış depolama türüne göre değişir:

  • Yerel depolama: Broker, hangisi önce gerçekleşirse gerçekleşsin fetch.min.bytes değerine ulaşılana veya fetch.max.wait.ms süresi dolana kadar bekler.

  • Cloud depolama: Broker, fetch.min.bytes değerinden bağımsız olarak yeni veriler geldiğinde hemen bir yanıt döndürür.

max.partition.fetch.bytes

Tek bir getirme işleminde broker'ın bölüm başına döndürdüğü maksimum veri miktarı. Birim: bayt.

Oturum yönetimi ve yeniden dengeleme

Hatalı yapılandırılmış oturum ve yoklama parametreleri, beklenmeyen tüketici yeniden dengelemelerinin en yaygın nedenidir. Yeniden dengeleme, bölümler yeniden atanana kadar gruptaki tüm tüketimi durdurduğundan gereksiz yeniden dengelemeleri tetiklemekten kaçının.

session.timeout.ms

Broker'ın tüketiciyi ölü kabul edip bir yeniden dengeleme tetiklemeden önce kalp atışları arasında geçen maksimum süre.

Önerilen Geçerli aralık Varsayılan Birim
30000 ila 60000 6000 ila 300000 10000 milisaniye
Not

Java istemci 0.10.1 ve sonraki sürümlerde, ayrılmış bir arka plan iş parçacığı kalp atışlarını

poll()

işleminden bağımsız olarak gönderir. Daha eski Java sürümlerinde veya Java dışı istemcilerde kalp atışları

poll()

çağrıları sırasında gönderildiğinden

session.timeout.ms

değeri hem veri işleme süresini hem de kalp atışı aralığını hesaba katmalıdır.

Not

İpucu:

heartbeat.interval.ms

değerini

session.timeout.ms

değerinin üçte birinden fazla olmayacak şekilde ayarlayın. Örneğin,

session.timeout.ms

45000 ise

heartbeat.interval.ms

değerini 15000 veya daha düşük ayarlayın.

max.poll.records

Tek bir poll() çağrısında döndürülen maksimum kayıt sayısı. Tüketici, bir sonraki poll() son tarihinden önce bu kadar çok kaydı işleyemezse, broker onu ölü kabul eder ve bir yeniden dengeleme tetikler.

Boyutlandırma formülü:

max.poll.records < messages_per_thread_per_second x consumer_threads x session_timeout_seconds

Örneğin, iş parçacığı başına saniyede 500 mesaj, 4 iş parçacığı ve 45 saniyelik oturum zaman aşımı durumunda:

500 x 4 x 45 = 90,000

Tüketicinin oturum zaman aşımına uğramadan önce her zaman işlemeyi bitirmesini sağlamak için max.poll.records değerini bu değerin altında ayarlayın.

max.poll.interval.ms

Broker'ın tüketiciyi gruptan çıkarmadan önce ardışık poll() çağrıları arasında geçen maksimum aralık. Bu parametre yalnızca kalp atışlarının ayrı bir iş parçacığında çalıştığı Java istemci 0.10.1 ve sonraki sürümler için geçerlidir.

Varsayılan Birim
300000 milisaniye

Boyutlandırma formülü:

max.poll.interval.ms > time_per_record x max.poll.records

Çoğu durumda 300000 (5 dakika) varsayılan değeri yeterlidir. Yalnızca işleme mantığınız son derece yavaşsa bu değeri artırın.

Ofset yönetimi

enable.auto.commit

Tüketicinin ofsetleri sabit bir aralıkla otomatik olarak commit etmesini kontrol eder.

Değer Davranış
true (varsayılan) Ofsetler her auto.commit.interval.ms milisaniyede bir otomatik olarak commit edilir. Yönetimi daha basittir ancak çökme sonrasında yinelenen işlemeye neden olabilir.
false Uygulamanız commitSync() veya commitAsync() yöntemlerini açıkça çağırmalıdır. Idempotent işleme ile birlikte kullanıldığında en az bir kez veya tam olarak bir kez teslim semantiği için bu seçeneği kullanın.

auto.commit.interval.ms

enable.auto.commit değeri true olduğunda otomatik ofset commit işlemleri için kullanılan aralık.

Varsayılan Birim
1000 milisaniye

Daha kısa bir aralık, çökme sonrasında yinelenen mesajlar için zaman penceresini azaltır ancak broker'a gönderilen commit isteği sayısını artırır.

auto.offset.reset

Tüketicinin commit edilmiş bir ofseti olmadığında veya commit edilmiş ofset geçersiz olduğunda (örneğin, ofset saklama ilkeleri nedeniyle silindiğinde) ne olacağını belirler.

Değer Davranış
latest En son ofsetten tüketmeye başlar. Yalnızca yeni mesajlar.
earliest Kullanılabilen en eski ofsetten tüketmeye başlar. Saklanan tüm mesajları yeniden işler.
none Bir özel durum oluşturur. Uygulamanız ofsetleri manuel olarak yönetiyorsa bunu kullanın.

Önerilen değer: latest. earliest kullanılması, geçersiz bir ofsetle karşılaşıldığında tüketicinin saklanan tüm mesajları yeniden işlemesine neden olur; bu da yinelenen işlemeye ve tüketici gecikmesinde ani artışa yol açabilir.

Uygulamanız ofset yönetimini manuel olarak gerçekleştiriyorsa (örneğin, ofsetleri harici bir veritabanında saklıyorsa) bu değeri none olarak ayarlayın.

Parametre hızlı başvurusu

Üretici parametreleri

Parametre Varsayılan Önerilen Birim
acks -- 1 (aktarım hızı) veya all (kalıcılık) --
retries -- Kullanılabilirlik gereksinimlerine göre ayarlayın --
retry.backoff.ms 100 1000 ms
batch.size 16384 16384 (varsayılan) bayt
linger.ms 0 100 ila 1000 ms
buffer.memory 33554432 >= batch.size x bölümler x 2 bayt
partitioner.class Yapışkan (2.4+) Yapışkan bölümleme --

Tüketici parametreleri

Parametre Varsayılan Önerilen Birim
fetch.min.bytes 1 Üretici mesaj hızına göre ayarlayın bayt
fetch.max.wait.ms 500 -- ms
max.partition.fetch.bytes 1048576 -- bayt
session.timeout.ms 10000 30000 ila 60000 ms
heartbeat.interval.ms 3000 session.timeout.ms değerinin <= 1/3'ü ms
max.poll.records 500 Boyutlandırma formülüne bakın --
max.poll.interval.ms 300000 300000 (varsayılan) ms
enable.auto.commit true Teslim semantiğine bağlıdır --
auto.commit.interval.ms 1000 1000 (varsayılan) ms
auto.offset.reset latest latest --