Kafka學習筆記(四、Kafka存儲機制和日志)


目錄:

  • Kafka存儲機制
  • Kafka分區規則
  • Kafka分區策略
  • Kafka日志

Kafka存儲機制

再說Kafka存儲機制之前我們先了解下分區和副本的作用

  • 分區:為了提高性能(也就是分而治之,它是高並發分布式中心思想)。
  • 副本:為了高可用(保證數據安全)。

如何設置副本數量:

  • 最低一個,最大不超過broker的數量(不在范圍內的首先會報錯;其次沒有意義,超過broker數量時,首先broker宕機時不管你有多少個副本都是一起掛掉,拿不到數據)。
  • 就經驗來說,參考Hadoop副本數量分配(Hadoop默認3個)。

——————————————————————————————————————————————————————

Kafka數據分為索引數據和數據,xxx.index、xxx.log。

存儲機制同樣采用分而治之的方式,首先消息根據topic(主題)分區,每個topic又有多個partition(分區),每個partition下又有多個segment(數據片)。

每一個partition就相當於一個巨大的文件,它被segment拆分成多個小文件,這邊是分而治之的思想。

你也可以理解成是公司,每個老板都是topic;為了提高管理效率增加了部門領導(partition),領導又管理職工(segment)。

.index存儲元數據.log存儲大量的消息。如果我們要找獲取消息,首先會通過二分法找到對應的index文件,再從index文件的偏移量找到對應的log文件。

如果是找偏移量為348的數據(上圖左側黃色編號為3),即對應log文件170410+3=170413,也就是消息為message170413的。

Kafka分區規則

假如我們有3個分區,3個副本(L代表leader,F代表follow)。

故機器配置如下:

T1L  T2L  T3L
T1F1 T2F1 T3F1
T1F2 T2F2 T3F2

1、先從所有broker選一個存儲第一個leader分區(選出broker1為T1L)。

2、按照broker順序分配第二、第三個leader分區(所以T2L、T3L分別被分在broker2、broker3上)。

3、依次分配follow分區(如:第T1L被分配到broker1上,那么T1F1、T1F2就會被分配到broker2和broker3上;依次類推,T2L的兩個follow會被依次分在broker3、broker0上)。

Kafka分區策略

  • 輪詢策略:若鍵值為null,並使用默認分區器,Kafka會根據輪詢策略將消息均勻的分到各個分區上。
  • 散列策略:若鍵值不為null,並使用了默認分區器,Kafka會對鍵進行散列,然后根據散列值將消息映射到對應的分區上。
  • 自定義策略:用戶可根據需要對數據使用不一樣的分區策略。

Kafka日志

ISR、HW、LEO同步流程:

  • ISR(In-sync replica): 副本同步隊列,當有一條新的消息提交后,副本同步消息成功后才會出現在此隊列中。若某個follow副本落后太多或宕機,leader會將它從ISR中刪除。
  • HW(high watemark): 高水位,指ISR中所有節點都已經復制完的消息的offset,也是消費者能獲取到的最大的offset。
  • LEO(LogEndOffset): 最后一條消息的偏移量。

假如有3個副本。

一開始消息的狀態是這樣的:

          L  F1 F2
          1  1  1
          2  2  2
HW & LEO  3  3  3

現發送一條消息,此時消息會先到leader副本,然后再通知其它兩個follow副本復制。若此時僅有F1復制成功,此時便是這樣的。

    L  F1 F2
    1  1  1
    2  2  2
HW  3  3  3
LEO 4 4

那么HW便是在4之上的3的位置,LEO是4的位置,LSR是L、F1。

當所有副本都同步完之后,HW與LEO便回到一個位置上。

          L  F1 F2
          1  1  1
          2  2  2
HW & LEO  3  3  3
4 4 4

——————————————————————————————————————————————————————

查看日志命令:./kafka-dumplog.sh --files --file /home/hadoop/kafka/broker-0/xxxx.index


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM