1. 程式人生 > >kafka初識

kafka初識

part strategy 屬於 socket 數據 更新 維護 一起 直觀

1.what is kafka

kafka是一個開源的消息隊列,其特點:

(1) 快,可以支持幾百兆每秒的數據,以及成千上萬個client.

(2) 快速擴展

(3)數據都會在磁盤中持久化

2. kafka的特性

IO

  (1) 寫只允許append

  (2) 讀取操作不會block寫操作

  (3)充分利用機械盤的特點,機械臂的移動速度比較緩慢,如果只是用apeend的操作,那麽機械臂的搖擺時間就會大量的被縮短,從而節省大量的時間。

Design Strategy

  (1) Pull VS Push

push model :主動去發送消息,比較高的througput,處理比較復雜的服務邏輯。

pull model: 主動推送消息,比較簡單的server logic,支持replay消息

概念

Topic and partition

kafka把消息按照topic進行分類,物理上topic使用partition組成,有個partition可以看成是一個隊列,一個partition只能屬於一個topic

大數據中,單臺物理機器的性能不能存儲所有的數據,將數據進行分區切割,每個server各自承擔一部分自己的職責,提高數據的讀寫速度。

offset

類似於隊列的索引,接收者通過offset定位partition上的消息位置。

兩個基本的API接口

publish topic data 寫數據

consumer topic data 讀數據

produce

發送數據的一方,使用push模型

consumer

接收數據的一方,使用pull模型

consumer group

同一性質consumer放在同一個組中

一個partition只能map到一個組中的一個consumer

log file

kafka的消息都以log file的形式存在,log file不會永久存在,kafka有自己的清理策略,因為kafka只是一個消息隊列,默認保存數據的時間為7天,也可以按照文件大小清理。

kafka消息格式

4byte CRC32的校驗信息,查看消息是否正確

1byte的‘magic’ value

1byte attribute value

8byte timestamp of ‘magic‘ value is bigger then 1

4byte key length

4byte value length

log file 的格式

一個partition對應一個目錄,每個消息存儲是還會產生其他的有些字段,8byte offset 4byte message length,每個picycal directory 中有很多file如00000.kfaka數字是文件中的偏移量

在kafka中維護這一個active segment list,記錄著offset 範圍和對應的文件mapping,delete一個segment file會在segment list 上加一個標誌位,標明已經刪除,過一段時間會有一個process 一起將其刪除。

log file有兩種形式,一種是直觀的file,一種是壓縮的file

IO --zerocopy

操作系統讀取文件,並不是直接加載application,而是要切換到CPU的kernel molde ,然後做底層的數據收發,例如,如果我們想要從buffer中讀取消息,會需要操作 操作系統將kernel molde 消息讀到read buffer中,在切換到user molde讀到application buffer進行操作後在加載到socket發送給客戶端,kafka采用了zerocopy的形式盡量減少kernel molde到user molde 的切換,直接將read buffer中的消息傳遞給socket這樣就節約時間,加快了效率。

data replication

kafka中的信息會自動的定期復制為多份,放在不同的brock上,replication的單位為partition,partition有leader和follower兩種角色,

(1)寫是向partition leader寫數據

(2)partition leader會將消息寫到本地的disk中

(3)follower會定期的向leader pull數據

(4)leader需要等所有的follower向其發ack的確認消息,等所有follower都發送ack,才認為是發送成功

ISR(in-sync replication)

replica 0 是leader 2和3是follower

ISR充分考慮到了sync和sync copy ,sync copy 是指leader 每次收到一條消息,follower 就更新過來,sync copy是指leader持續不斷的寫,follower持續不斷的同步。

ISR 維持這一個水線high water mark 在hign water mark之上的數據用戶才能看到,leader持續不斷的寫數據,將沒有返回ack的數據展現給用戶的。

kafka初識