高吞吐
高可用
可擴(kuò)展
低延時(shí)
一致性
- 怎么把文件組織起來
物理上怎么存儲(chǔ)
邏輯上怎么存儲(chǔ) - 怎么實(shí)現(xiàn)寫入
- 怎么實(shí)現(xiàn)讀取
存儲(chǔ)結(jié)構(gòu)的邏輯劃分和文件系統(tǒng)中的劃分
kafka中消息以主題分類進(jìn)行管理
主題又劃分為若干個(gè)分區(qū),每個(gè)分區(qū)有若干個(gè)副本,每個(gè)分區(qū)(副本)對(duì)應(yīng)著一個(gè)Log诅病,每個(gè)Log對(duì)應(yīng)著多個(gè)LogSegment
每個(gè)分區(qū)(副本)在文件系統(tǒng)中的存在形式是目錄戚宦,LogSegment在文件系統(tǒng)中的存在形式是多個(gè)文件晰洒,這些文件包括:
.log(日志文件).index(偏移量索引文件).timeindex(時(shí)間戳索引文件) 其他文件
分區(qū)(副本)對(duì)應(yīng)目錄的命名:topicName-partitionNumber
LogSegment的命名:每個(gè)LogSegment的第一消息的offset成為基準(zhǔn)偏移量(偏移量從0開始)蕾额,LogSegment文件以基準(zhǔn)偏移量命名(20位數(shù)字)
消費(fèi)者提交的位移保存在_consumer_offset主題中野建,初始情況下這個(gè)主題并不存在娜谊,當(dāng)?shù)谝淮斡邢M(fèi)者消費(fèi)時(shí)會(huì)自動(dòng)創(chuàng)建這個(gè)主題
kafka磁盤存儲(chǔ)的優(yōu)化
順序?qū)?br>
頁緩存
零拷貝
- 寫入只支持追加模式
- 大量使用頁緩存鼎文,避免使用swap分區(qū)
- 零拷貝
零拷貝的解釋:
將靜態(tài)內(nèi)容傳遞給用戶
未采用零拷貝:
把文件復(fù)制到內(nèi)核模式下內(nèi)存中
將內(nèi)核模式下文件復(fù)制到用戶模式下
將用戶模式下文件復(fù)制到內(nèi)核模式下socket buffer中
將內(nèi)核模式下socket buffer中數(shù)據(jù)復(fù)制到網(wǎng)卡模式下
采用零拷貝:
將文件復(fù)制到內(nèi)核模式下內(nèi)存中
將文件復(fù)制到網(wǎng)卡模式下,將包含數(shù)據(jù)位置和長度的信息復(fù)制到socket buffer中