1 生產(chǎn)者配置參數(shù):
kafka.producer.retries 當(dāng)生產(chǎn)者發(fā)送失敗的時(shí)候重試的次數(shù)作煌,大多數(shù)情況下,如果kafka生產(chǎn)端發(fā)送的數(shù)據(jù)是在異步事件隊(duì)列里邊赚瘦,這個(gè)數(shù)據(jù)設(shè)置成1粟誓,重試交給異步對(duì)接即可
kafka.producer.batch.size kafka發(fā)送端批量發(fā)送的的緩存大小,默認(rèn)是16kB起意,意思是緩存中的數(shù)據(jù)達(dá)到配置的數(shù)值大小鹰服,kafka的生產(chǎn)端發(fā)送數(shù)據(jù),這個(gè)參數(shù)一般和kafka.producer.linger配合使用
kafka.producer.linger代表發(fā)送延時(shí),默認(rèn)延時(shí)時(shí)間是0s悲酷,接到消息立刻發(fā)送套菜,一般對(duì)于吞吐量要求不高的生產(chǎn)端,不設(shè)置這個(gè)數(shù)值设易,對(duì)于吞吐量要求高逗柴,實(shí)時(shí)性要求不高的生產(chǎn)端,可以配置下延遲時(shí)間顿肺,和上一個(gè)參數(shù)一起使用
kafka.producer.batch.size小戏溺,吞吐量低,延時(shí)低挟冠,kafka.producer.batch.size大于购,吞吐量高,延時(shí)高
kafka.producer.buffer.memory指定producer端用于緩存消息的緩沖區(qū)的大小知染,單位是字節(jié)肋僧,默認(rèn)32M,采用異步發(fā)送消息的架構(gòu)控淡,Java版Producer啟動(dòng)時(shí)會(huì)首先創(chuàng)建一塊內(nèi)存緩沖區(qū)用于保存待發(fā)送消息嫌吠,然后由另一個(gè)專屬線程負(fù)責(zé)從緩沖區(qū)中讀取消息執(zhí)行真正的發(fā)送,這部分內(nèi)存空間的大小就是由buffer.memory參數(shù)指定掺炭。該參數(shù)指定的內(nèi)存大小幾乎可以認(rèn)為是producer程序使用的內(nèi)存大小辫诅,若producer程序要給很多分區(qū)發(fā)送消息,那么就需要仔細(xì)設(shè)置該參數(shù)防止過小的內(nèi)存緩沖區(qū)降低了producer程序整體的吞吐量
kafka.producer.request.timeout.ms當(dāng)producer發(fā)送請(qǐng)求給broker后涧狮,broker需要在規(guī)定時(shí)間范圍內(nèi)將處理結(jié)果返回給producer炕矮。超時(shí)時(shí)間默認(rèn)30s。
2 kafka 三種容錯(cuò)方式配置
spring.kafka.producer.acks
1 當(dāng)上邊參數(shù)設(shè)置成0者冤,producer端不確定消息是否發(fā)送成功肤视,只是發(fā)出去,并不等待broker返回響應(yīng)涉枫,數(shù)據(jù)可能丟失邢滑,但是優(yōu)勢(shì)是對(duì)于吞吐量高,不要求保證完整一致性的需求來說(比如日志處理)愿汰,這是好的方式
2 當(dāng)上邊參數(shù)設(shè)置成1困后,表示producer會(huì)在leader partition收到消息時(shí)得到broker的一個(gè)確認(rèn),這樣會(huì)有更好的可靠性衬廷,因?yàn)榭蛻舳藭?huì)等待知道broker確認(rèn)收到消息摇予。此時(shí),當(dāng)發(fā)送消息時(shí)吗跋,leader broker僅將該消息寫入本地日志侧戴,然后便發(fā)送響應(yīng)結(jié)果給producer,而無需等待ISR中其他副本寫入該消息;
3當(dāng)上邊參數(shù)設(shè)置成-1或者all救鲤,producer會(huì)在所有備份的partition收到消息時(shí)得到broker的確認(rèn),這個(gè)設(shè)置可以得到最高的可靠性保證秩冈。此時(shí)本缠,當(dāng)發(fā)送消息時(shí),leader broker不僅會(huì)將消息寫入本地日志入问,同時(shí)還會(huì)等待ISR中所有其他副本都成功寫入它們各自的本地日志后丹锹,才發(fā)送響應(yīng)結(jié)果給producer。
3 kafka消費(fèi)端配置
kafka.consumer.enable.auto.commit 這個(gè)參數(shù)非常重要芬失,主要是控制kafka是自動(dòng)提交偏移量還是手動(dòng)提交偏移量楣黍,為true的時(shí)候自動(dòng)提交偏移量,為false的時(shí)候手動(dòng)提交偏移量棱烂,不過springboot一個(gè)坑爹的地方是租漂,當(dāng)這個(gè)參數(shù)設(shè)置成false的時(shí)候,spring-kafka包會(huì)幫助用戶更新offset數(shù)值颊糜,造成用戶手動(dòng)提交失敗哩治,offset偏移量依舊增加的情景,這樣衬鱼,數(shù)據(jù)就“丟失”了
kafka.consumer.auto.commit.interval 自動(dòng)提交間隔业筏,如果上一個(gè)參數(shù)設(shè)置成false,這個(gè)字段就沒用了
kafka.consumer.auto.offset.reset 這個(gè)字段定義消費(fèi)順序
earliest
當(dāng)各分區(qū)下有已提交的offset時(shí)鸟赫,從提交的offset開始消費(fèi)蒜胖;無提交的offset時(shí),從頭開始消費(fèi)
latest
當(dāng)各分區(qū)下有已提交的offset時(shí)抛蚤,從提交的offset開始消費(fèi)台谢;無提交的offset時(shí),消費(fèi)新產(chǎn)生的該分區(qū)下的數(shù)據(jù)
none
topic各分區(qū)都存在已提交的offset時(shí)霉颠,從offset后開始消費(fèi)对碌;只要有一個(gè)分區(qū)不存在已提交的offset,則拋出異常
這個(gè)字段詳細(xì)解釋請(qǐng)參考另一篇文章:
https://blog.csdn.net/lishuangzhe7047/article/details/74530417