原文地址:https://kafka.apache.org/0101/documentation.html#design_quotas
從0.9版本開始井赌,Kafka可以對(duì)生產(chǎn)和消費(fèi)請(qǐng)求進(jìn)行限額配置。基于字節(jié)速率來(lái)限制衣赶,每個(gè)group中所有的客戶端共享一個(gè)限額。
Why are quotas necessary?
Producer和Consumer可能生產(chǎn)或消費(fèi)大量的數(shù)據(jù)而耗盡Broker的資源,導(dǎo)致網(wǎng)絡(luò)飽和废麻。進(jìn)行限額可以避免這些問題,特別是在多租戶的集群中模庐,一小部分低質(zhì)量的客戶端會(huì)降低整個(gè)集群的體驗(yàn)烛愧。實(shí)際上,當(dāng)運(yùn)行Kafka作為服務(wù)時(shí)掂碱,這還可以對(duì)API的使用進(jìn)行限制怜姿。
Client groups
Kafka客戶端的身份代表了用于鑒權(quán)。 在無(wú)鑒權(quán)機(jī)制的集群中疼燥,用戶身份是由服務(wù)器使用可配置的PrincipalBuilder進(jìn)行選擇的沧卢,Client-id作為客戶端邏輯分組,是由客戶端應(yīng)用選擇的一個(gè)有意義的名稱醉者。標(biāo)量(user, client-id)定義共享這個(gè)用戶身份和客戶端ID的邏輯客戶端分組但狭。
配額可以用于(user, client-id)組合披诗,或user,client-id分組立磁。
對(duì)一個(gè)給定的連接呈队,最符合這個(gè)連接的配額被使用到,一個(gè)限額組的所有連接共享這個(gè)限額配置唱歧,例如:如果(user=”test-user”, client-id=”test-client”) 10MB/s的配額宪摧,這個(gè)配置會(huì)被所有的具有”test-user”用戶和客戶端ID是 “test-client”的所有生產(chǎn)者所共享。
Quota Configuration
配額可以按照(user, client-id)或者, user或client-id進(jìn)行分組, 如果需要更高或更低的配額, 可以覆蓋默配額, 這個(gè)機(jī)制類似于對(duì)日志主題配置的覆蓋, user 或者 (user, client-id)配額可以覆蓋寫入到zookeeper下的 /config/users ,client-id配置, 可以寫入到 /config/clients颅崩。這些覆蓋寫入會(huì)被服務(wù)器很快的讀取到, 這讓我們修改配置不需要重新啟動(dòng)服務(wù)器. 每個(gè)分組的默認(rèn)配置也可以同樣的方式動(dòng)態(tài)修改几于。
限額的配置順序如下:
- 1./config/users//clients/
- 2./config/users//clients/
- 3./config/users/
- 4./config/users//clients/
- 5./config/users//clients/
- 6./config/users/
- 7./config/clients/
- 8./config/clients/
Broker的quota.producer.default,quota.consumer.default也可以用來(lái)配置默認(rèn)的client-id分組的默認(rèn)值沿后。這可屬性已經(jīng)不鼓勵(lì)使用沿彭,后續(xù)將會(huì)刪除。默認(rèn)client-id限額配置可以和其它默認(rèn)配置一樣尖滚,在Zookeeper直接設(shè)置喉刘。
Enforcement
默認(rèn)情況下,每個(gè)唯一的客戶端group會(huì)收到一個(gè)集群配置的固定的限額熔掺。這個(gè)限額是基于每個(gè)Broker的饱搏。每個(gè)客戶端能發(fā)布或獲取在每臺(tái)服務(wù)器都的最大速率, 我們按服務(wù)器定義配置, 而不是按整個(gè)集群定義,是因?yàn)槿绻羌悍秶男枰~外的機(jī)制來(lái)共享配額的使用情況, 這會(huì)導(dǎo)致配額機(jī)制的實(shí)現(xiàn)比較難。
Broker檢測(cè)到限額違規(guī)時(shí)時(shí)如何處理的置逻?在我們的解決方案中推沸,Broker不會(huì)返回錯(cuò)誤給客戶端,而是降低客戶端的速率券坞。Broker計(jì)算使客戶端回到合理限額的需要的響應(yīng)延遲鬓催。這種方法的處理對(duì)客戶端是透明,使他們不必執(zhí)行任何棘手的恨锚,特殊的操作宇驾。實(shí)際上,錯(cuò)誤的客戶端還可能加劇正在解決的限額問題猴伶。
客戶端字節(jié)率在多個(gè)小窗口(例如每個(gè)1秒的30個(gè)窗口)上進(jìn)行測(cè)量课舍,以便快速檢測(cè)和糾正配額違規(guī)。 通常他挎,具有大的測(cè)量窗口(例如筝尾,每個(gè)30秒的10個(gè)窗口)導(dǎo)致大量的流量脈沖,隨后是長(zhǎng)時(shí)間的延遲办桨,這在用戶體驗(yàn)方面不是很好筹淫。