kafka2:性能優(yōu)化

參考

kafka 技術(shù)分享
如何確定Kafka的分區(qū)數(shù),key和consumer線程數(shù)伤溉,以及不消費問題解決
kafka性能參數(shù)和壓力測試揭秘
kafka producer線程與吞吐量

1.partition數(shù)量配置

partition數(shù)量由topic的并發(fā)決定扰路,并發(fā)少則1個分區(qū)就可以猾骡,并發(fā)越高舅桩,分區(qū)數(shù)越多,可以提高吞吐量担猛。

創(chuàng)建topic時指定topic數(shù)量
bin/kafka-topics.sh --create --zookeeper 10.25.58.35:2181 --replication-factor 3 --partitions 3 --topic test8

2.日志保留策略設(shè)置

當kafka broker的被寫入海量消息后,會生成很多數(shù)據(jù)文件丢氢,占用大量磁盤空間傅联,kafka默認是保留7天,建議根據(jù)磁盤情況配置疚察,避免磁盤撐爆蒸走。

log.retention.hours=72

段文件配置1GB,有利于快速回收磁盤空間貌嫡,重啟kafka加載也會加快(如果文件過小比驻,則文件數(shù)量比較多该溯,kafka啟動時是單線程掃描目錄(log.dir)下所有數(shù)據(jù)文件)

log.segment.bytes=1073741824

3.文件刷盤策略

為了大幅度提高producer寫入吞吐量,需要定期批量寫文件别惦。建議配置:

每當producer寫入10000條消息時狈茉,刷數(shù)據(jù)到磁盤
log.flush.interval.messages=10000

每間隔1秒鐘時間,刷數(shù)據(jù)到磁盤
log.flush.interval.ms=1000

4.網(wǎng)絡(luò)和io操作線程配置優(yōu)化

一般num.network.threads主要處理網(wǎng)絡(luò)io掸掸,讀寫緩沖區(qū)數(shù)據(jù)氯庆,基本沒有io等待,配置線程數(shù)量為cpu核數(shù)加1.

broker處理消息的最大線程數(shù)
num.network.threads=xxx

num.io.threads主要進行磁盤io操作扰付,高峰期可能有些io等待堤撵,因此配置需要大些。配置線程數(shù)量為cpu核數(shù)2倍羽莺,最大不超過3倍.

broker處理磁盤IO的線程數(shù)
num.io.threads=xxx

加入隊列的最大請求數(shù),超過該值实昨,network thread阻塞

queued.max.requests=5000

server使用的send buffer大小。

socket.send.buffer.bytes=1024000

server使用的recive buffer大小。

socket.receive.buffer.bytes=1024000

5.異步提交(kafka.javaapi.producer)

采用同步:1000條8s扣墩;
采用異步:100條或3s異步寫入趾浅,速度提升為1w條2s(ProducerConfig)

request.required.acks=0  
producer.type=async     
##在異步模式下,一個batch發(fā)送的消息數(shù)量锐墙。producer會等待直到要發(fā)送的消息數(shù)量達到這個值,之后才會發(fā)送长酗。但如果消息數(shù)量不夠溪北,達到queue.buffer.max.ms時也會直接發(fā)送。       
batch.num.messages=100  
##默認值:200夺脾,當使用異步模式時之拨,緩沖數(shù)據(jù)的最大時間。例如設(shè)為100的話咧叭,會每隔100毫秒把所有的消息批量發(fā)送蚀乔。這會提高吞吐量,但是會增加消息的到達延時
queue.buffering.max.ms=100  
##默認值:5000菲茬,在異步模式下吉挣,producer端允許buffer的最大消息數(shù)量,如果producer無法盡快將消息發(fā)送給broker婉弹,從而導致消息在producer端大量沉積睬魂,如果消息的條數(shù)達到此配置值,將會導致producer端阻塞或者消息被拋棄镀赌。
queue.buffering.max.messages=1000 ##發(fā)送隊列緩沖長度
##默認值:10000氯哮,當消息在producer端沉積的條數(shù)達到 queue.buffering.max.meesages 時,阻塞一定時間后商佛,隊列仍然沒有enqueue(producer仍然沒有發(fā)送出任何消息)喉钢。此時producer可以繼續(xù)阻塞或者將消息拋棄姆打,此timeout值用于控制阻塞的時間,如果值為-1(默認值)則 無阻塞超時限制出牧,消息不會被拋棄穴肘;如果值為0 則立即清空隊列,消息被拋棄舔痕。
queue.enqueue.timeout.ms=100     
compression.codec=gzip

6.producer版本

參考

what's the difference between kafka.javaapi.* and org.apache.kafka.*?
Kafka new producer not behaving consistently

使用新producer發(fā)送少量消息時丟失

新producer:org.apache.kafka.clients.producer(KafkaProducer.java)
老producer:kafka.javaapi.producer(Producer.scala)

  • 查閱資料后评抚,原因為使用producer時必須調(diào)用producer.close(),且在發(fā)送后Thread.sleep適當時間伯复,則不會丟失數(shù)據(jù)慨代。否則會造成資源泄露,導致數(shù)據(jù)丟失啸如。
  • 當使用多個producer進行發(fā)送時(使用apache線程池)侍匙,當同時有多個producer并發(fā)發(fā)送時,依然會造成數(shù)據(jù)丟失叮雳。sleep后有好轉(zhuǎn)想暗,但仍然丟失。
  • 使用老producer帘不,且compression.codec不為snappy時说莫,不會造成數(shù)據(jù)丟失。使用線程池也不會丟失寞焙。

7.性能測試

kafka 10 性能測試
kafka自帶的性能測試工具储狭,位于bin/kafka-producer-perf-test.sh。

8.生產(chǎn)端發(fā)送堵塞

  • 調(diào)整producer緩沖區(qū)大小 queue.buffering.max.messages
  • 增加通道數(shù)量:多建幾個producer捣郊,使用連接池管理producer

producer使用線程池

  1. buffer.memory設(shè)置的緩存是針對每個producerThread
    針對每個producerThread辽狈,不應(yīng)設(shè)置高,以免影響內(nèi)存
  2. 線程池中線程數(shù)量如何設(shè)置呛牲?
    監(jiān)視剩余線程數(shù)據(jù)刮萌,進行動態(tài)調(diào)整,并針對可能出現(xiàn)的峰值預(yù)留一定的線程娘扩。
  3. 使用tryAcquire()還是acquire()尊勿??阻塞或放棄消息畜侦??
    使用apache的線程池即可躯保,設(shè)置阻塞時的等待時間旋膳,超過后則拋出異常。
  4. 是否對線程池容量進行動態(tài)調(diào)整途事?
    使用apache的線程池即可验懊。
  5. 線程池最大線程數(shù)100擅羞,啟用50個thread同時發(fā)送日志,報錯:

kafka.common.QueueFullException: Event queue is full of unsent messages, could not send event: KeyedMessage(test12,null,null,........
報錯原因為生產(chǎn)速度大于發(fā)送速度(網(wǎng)絡(luò)傳輸?shù)葲Q定)义图,可設(shè)置繼續(xù)等待時間减俏,超過此時間后丟棄消息;或設(shè)置一直阻塞碱工,排隊等待消息發(fā)送完畢(會造成線程死鎖)娃承。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市怕篷,隨后出現(xiàn)的幾起案子历筝,更是在濱河造成了極大的恐慌,老刑警劉巖廊谓,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梳猪,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒸痹,警方通過查閱死者的電腦和手機春弥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叠荠,“玉大人匿沛,你說我怎么就攤上這事◎眩” “怎么了俺祠?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長借帘。 經(jīng)常有香客問我蜘渣,道長,這世上最難降的妖魔是什么肺然? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任蔫缸,我火速辦了婚禮,結(jié)果婚禮上际起,老公的妹妹穿的比我還像新娘拾碌。我一直安慰自己,他們只是感情好街望,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布校翔。 她就那樣靜靜地躺著,像睡著了一般灾前。 火紅的嫁衣襯著肌膚如雪防症。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音蔫敲,去河邊找鬼饲嗽。 笑死,一個胖子當著我的面吹牛奈嘿,可吹牛的內(nèi)容都是我干的貌虾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼裙犹,長吁一口氣:“原來是場噩夢啊……” “哼尽狠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伯诬,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤晚唇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盗似,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩陕,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年赫舒,在試婚紗的時候發(fā)現(xiàn)自己被綠了悍及。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡接癌,死狀恐怖心赶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缺猛,我是刑警寧澤缨叫,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站荔燎,受9級特大地震影響耻姥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜有咨,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一琐簇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧座享,春花似錦婉商、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淳衙,卻和暖如春癣籽,著一層夾襖步出監(jiān)牢的瞬間挽唉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工筷狼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匠童。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓埂材,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汤求。 傳聞我的和親對象是個殘疾皇子俏险,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)扬绪,斷路器竖独,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • kafka的定義:是一個分布式消息系統(tǒng),由LinkedIn使用Scala編寫挤牛,用作LinkedIn的活動流(Act...
    時待吾閱讀 5,311評論 1 15
  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,465評論 0 34
  • Design 1. Motivation 我們設(shè)計Kafka用來作為統(tǒng)一的平臺來處理大公司可能擁有的所有實時數(shù)據(jù)源...
    BlackManba_24閱讀 1,361評論 0 8
  • Kafka入門經(jīng)典教程-Kafka-about云開發(fā) http://www.aboutyun.com/threa...
    葡萄喃喃囈語閱讀 10,812評論 4 54