本套系列博客從真實商業環境抽取案例進行總結和分享,並給出kafka商業應用的調優建議和集羣環境容量規劃等內容,請持續關注本套博客。版權聲明:本套kafka調優系列版權歸做者(秦凱新)全部,禁止轉載,歡迎學習。緩存
在消息被認爲是「已提交」以前,producer須要leader確認的produce請求的應答數。該參數用於控制消息的持久性,目前提供了3個取值:安全
acks = 0: 表示produce請求當即返回,不須要等待leader的任何確認。這種方案有最高的吞吐率,可是不保證消息是否真的發送成功。網絡
acks = -1: 表示分區leader必須等待消息被成功寫入到全部的ISR副本(同步副本)中才認爲produce請求成功。這種方案提供最高的消息持久性保證,可是理論上吞吐率也是最差的。架構
acks = 1: 表示leader副本必須應答此produce請求並寫入消息到本地日誌,以後produce請求被認爲成功。若是此時leader副本應答請求以後掛掉了,消息會丟失。這是個這種的方案,提供了不錯的持久性保證和吞吐。app
若是要較高的持久性要求以及無數據丟失的需求,設置acks = -1。其餘狀況下設置acks = 1異步
該參數用於指定Producer端用於緩存消息的緩衝區大小,單位爲字節,默認值爲:33554432合計爲32M。kafka採用的是異步發送的消息架構,prducer啓動時會首先建立一塊內存緩衝區用於保存待發送的消息,而後由一個專屬線程負責從緩衝區讀取消息進行真正的發送。post
producer壓縮器,目前支持none(不壓縮),gzip,snappy和lz4。性能
基於公司物聯網平臺,試驗過目前lz4的效果最好。固然2016年8月,FaceBook開源了Ztandard。官網測試: Ztandard壓縮率爲2。8,snappy爲2.091,LZ4 爲2.101 。學習
producer重試的次數設置。重試時producer會從新發送以前因爲瞬時緣由出現失敗的消息。瞬時失敗的緣由可能包括:元數據信息失效、副本數量不足、超時、位移越界或未知分區等。假若設置了retries > 0,那麼這些狀況下producer會嘗試重試。測試
producer都是按照batch進行發送的,所以batch大小的選擇對於producer性能相當重要。producer會把發往同一分區的多條消息封裝進一個batch中,當batch滿了後,producer纔會把消息發送出去。可是也不必定等到滿了,這和另一個參數linger.ms有關。默認值爲16K,合計爲16384.
producer是按照batch進行發送的,可是還要看linger.ms的值,默認是0,表示不作停留。這種狀況下,可能有的batch中沒有包含足夠多的produce請求就被髮送出去了,形成了大量的小batch,給網絡IO帶來的極大的壓力。
producer的IO線程在單個Socket鏈接上可以發送未應答produce請求的最大數量。增長此值應該能夠增長IO線程的吞吐量,從而總體上提高producer的性能。不過就像以前說的若是開啓了重試機制,那麼設置該參數大於1的話有可能形成消息的亂序。
秦凱新 於深圳 2018-10-27