聊聊Kafka的 金手指 外掛程式

2021-10-23 09:47:27 字數 942 閱讀 4134

聽過zeromq嗎

zeromq完全沒有任何伺服器節點,也不會使用硬碟,按照道理說它應該比kafka快。可是實際測試下來它的速度還是被kafka「吊打」。

kafka使用磁碟檔案儲存還想快速?

「乙個用硬碟的比用記憶體的快」,這絕對違反常識;

如果這種事情發生說明——它開掛了。

沒錯,kafka「開掛」實錘。

因為硬碟是機械結構,每次讀寫都會定址->寫入,其中定址是乙個「機械動作」,它是最耗時的。所以硬碟最「討厭」隨機i/o,最喜歡順序i/o。為了提高讀寫硬碟的速度,kafka就是使用順序i/o。

每乙個partition其實都是乙個檔案,收到訊息後kafka會把資料插入到檔案末尾

即便是順序寫入硬碟,硬碟的訪問速度還是不可能追上記憶體。所以kafka的資料並不是實時的寫入硬碟,它充分利用了現代作業系統分頁儲存來利用記憶體提高i/o效率。

sendfile函式在兩個檔案描述符之間直接傳遞資料(完全在核心中操作),從而避免了核心緩衝區和使用者緩衝區之間的資料拷貝,效率很高,這被稱為零拷貝。sendfile函式的定義如下:

#include 

ssize_t sendfile

(int out_fd,

int in_fd, off_t* offset, size_t count)

;

沒錯,kafka是用mmap作為檔案讀寫方式的,它就是乙個檔案控制代碼(檔案描述符),所以直接把它傳給sendfile;偏移也好解決,使用者會自己保持這個offset,每次請求都會傳送這個offset

#總結

# producer寫入的『作弊方法』是——順序寫入

# 寫入後使用記憶體對映——mmap

# consumer消費時的作弊方法是——零拷貝

# 零拷貝時,輸入mmap與offset,輸出到socket,最終到網路介面

聊聊手遊的那些驚喜與驚嚇

引言 對於乙個能夠蘊藏巨大資訊量的遊戲產品而言,多為玩家準備一些驚喜的心態,是不會有錯的。很多的案例和事實也證明,驚喜會給遊戲帶來很多產品設計師意想不到的收穫,但如果驚喜運用得不好往往會程式設計驚嚇,甚至還會給產品帶來可怕的負面效果。相關圖書 產品為王 移動遊戲產品設計規則 懷舊和感動都是製造驚喜的...

聊聊手遊的那些驚喜與驚嚇

引言 對於乙個能夠蘊藏巨大資訊量的遊戲產品而言,多為玩家準備一些驚喜的心態,是不會有錯的。很多的案例和事實也證明,驚喜會給遊戲帶來很多產品設計師意想不到的收穫,但如果驚喜運用得不好往往會程式設計驚嚇,甚至還會給產品帶來可怕的負面效果。相關圖書 產品為王 移動遊戲產品設計規則 懷舊和感動都是製造驚喜的...

CTS2019 氪金手遊

解題思路 考場上想出了外向樹的做法,居然沒意識到反向邊可以容斥,其實外向樹會做的話這個題差不多就做完了。令 dp u i 表示單獨考慮 u 節點所在子樹,子樹內 sum w i 的合法概率,可以簡單證明子樹外的選取是不影響子樹內的答案的,所以可以這樣表示。證明 我們只考慮子樹內的第乙個選出根節點 u...