-
高性能的多分區(qū)、冗余副本集群架構(gòu)
-
高性能網(wǎng)絡(luò)模型NIO
? ? ? ? 簡(jiǎn)單架構(gòu)設(shè)計(jì):
詳細(xì)架構(gòu)設(shè)計(jì):
-
高性能的磁盤寫(xiě)技術(shù)
-
高性能的消息查找設(shè)計(jì)
????????索引文件定位使用跳表的設(shè)計(jì)
????????偏移量定位消息時(shí)使用稀疏索引:
-
高響應(yīng)的磁盤拷貝技術(shù)
kafka采用sendFile()的零拷貝方式,磁盤DMA到內(nèi)存,然后一次cpu copy到socket緩存,一次DMA到網(wǎng)卡完成數(shù)據(jù)發(fā)送。
-
粘性分區(qū)算法
如下圖,6條消息采用key可能分三次發(fā)送到三個(gè)不同的分區(qū),需要3次網(wǎng)絡(luò)請(qǐng)求。如果沒(méi)有key將封住成一個(gè)批次發(fā)送。這樣一次網(wǎng)路請(qǐng)求就可以發(fā)送多條消息,大大提高了效率。
-
批處理、內(nèi)存池設(shè)計(jì)
將多個(gè)同分區(qū)的消息,一次批量發(fā)送到server,大大減少了網(wǎng)絡(luò)IO的消耗。
BufferPool 總大小為16k固定大小加上一個(gè)avaliableMemory(存儲(chǔ)大消息),每個(gè)batch申請(qǐng)內(nèi)存釋放內(nèi)存,循環(huán)往復(fù)。
-
多線程協(xié)同設(shè)計(jì)
圖是發(fā)送消息主線程和發(fā)送網(wǎng)絡(luò)請(qǐng)求sender線程配合獲取元數(shù)據(jù)的流程:
-
高性能、安全的數(shù)據(jù)結(jié)構(gòu)
RecordAccumulator中存儲(chǔ)了每個(gè)分區(qū)對(duì)應(yīng)的消息隊(duì)列,在發(fā)送消息時(shí)會(huì)經(jīng)常讀取隊(duì)列將消息加入到隊(duì)列中。所以在batches設(shè)計(jì)時(shí)需要考慮到高性能、高并發(fā)的。
private final ConcurrentMap<TopicPartition, Deque<ProducerBatch>> batches;
-
分段鎖的設(shè)計(jì)思想
-
粘包黏包解決
讀取數(shù)據(jù)時(shí)kafka采用了4字節(jié)標(biāo)識(shí)數(shù)據(jù)長(zhǎng)度來(lái)避免粘包黏包的問(wèn)題:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-716025.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-716025.html
到了這里,關(guān)于圖解Kafka高性能之謎(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!