kafka初識
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初識