Kafak探究之路- 內部結構小結
1.框架與工作流
2 內部結構
kafka的每個主題分割槽的資料在 first-0(主題名-分割槽號)資料夾下,儲存 n組xxx.log檔案與xxx.index檔案。log檔案存傳送訊息的元資料,每個大小預設為1G,index為log的索引存這些訊息的序號與起始地址。index每個索引大小一樣,這樣硬體定址的時候,可以跳躍(n-1)*length個地址,找到第n條資料的資訊,查起來很快!
3 分割槽的介面方法與含義
4 ACK與ISR
ACK: 生產者給kakfa叢集傳送訊息後,kafka會給生產者返回ack表明,已經成功接收到訊息。如何解決以下問題
引入ISR
ISR 就是從10臺foller機器中選5臺進入ISR,這5臺如果某在單位時間內不能與leader同步,則被踢出,或者某臺與leader相差訊息數量大於n,也會被踢出。
0.9版本以後,將相差數量去除,因為如果相差數量是1000,而傳送訊息每個batch為1200,那每次一發訊息,ISR中的節點將全部被踢出,稍後同步後,又進入,而且還得訪問zk,這樣無線迴圈浪費資源
ack引數配置
ack = 0,只發資料,啥都不管
ack = 1,發資料,leader接收完成,再返回ack,繼續發資料
ack = -1 所有的ISR全部同步資料後,再返回ack,繼續發資料
ack = 0 的時候,在發資料後,只要leader掛掉,就會丟資料,ack = 1時候 leader掛掉,follwer未同步就會丟資料。ack = -1的時候,若ISR裡面只有leader,則與1情況一樣
ack等於 -1 的時候,若ISR的follwer已經同步,但是在返回ack過程中,leader掛掉,則會重複傳送資料,造成資料重複
&n