《Kafka實戰》之架構和設計邏輯
1、訊息佇列的型別
1.1 點對點
只有一個消費者做消費TopicA,其他消費者不能消費TopicA中的訊息
1.2釋出訂閱
只要訂閱了某個Topic的消費者都可以消費該Topic中的資料
對於TopicA,可以由多個消費者訂閱 也可以由多多個消費者消費,同一個組中的消費者不能重複消費
eg:TopicA中有訊息 M1 M2 M3 M4 M5 M6 6條訊息
組G1、G2 G1下有消費者C1 C2 C3 G2下有消費者 C4 C5 C6
如果C1可以消費了M1 C2消費了M2 C3消費了M3 ,那麼C4 C5 C6依然可以消費 M1 M2 M3 因為他們不屬於同一個組
2、kafka分割槽
分割槽的目的
2.1、可以使多個同一個組的消費者消費不同分割槽的資料 這樣可以做到並行消費 提升消費者的速率
2.2、便於log的分散 kafka基於Log追加的方式持久化訊息 ,分割槽可以有效的分散日誌檔案
生產者可以指定傳送到Topic的具體某個partition中
生產者非同步傳送,即不會每一條訊息都傳送一次 而是先積攢在生產者的記憶體中,達到一定量的時候一起傳送,節省網路資源
3、borker
borker通過日誌追加的方式持久化訊息 每個分割槽一個獨立的日誌檔案 kafka訊息有序
為了減少磁碟寫入的次數,broker會將訊息暫時buffer起來,當訊息的個數(或尺寸)達到一定閥值時,再flush到磁碟,這樣減少了磁碟IO呼叫的次數
broker不儲存消費者的狀態 即不儲存某個消費者消費到哪兒了,有消費者自己管理
而無狀態的訊息也使得訊息刪除也成了麻煩,kafka基於時間的SLA(服務水平保證)
4、Message
訊息是kafka通訊的單位 每個訊息儲存在一個Partition中
每條訊息包含3個屬性
1、offset
2、訊息大小 MessageSize
3、data 訊息的具體內容
5、kafka 持久化
kafka不同於傳統的訊息佇列持久化,傳統的持久化方式是把記憶體作為磁碟的buffer,而kafka開發者發現,線性的訪問磁碟在很多時候比隨機訪問記憶體還要快,所以kafka直接把訊息線性的寫入磁碟
寫的時候線性的寫入即順序寫入亦即線性追加,讀的時候直接讀檔案即可,這樣做的好處是讀寫不互斥,訊息的持久化不會影響訊息的讀取
持久化時每個Partition都有一個獨立的檔案,每個partition內部都是有序的,每條訊息都會有一個唯一的id即offset偏移
6、稀疏索引
kafka內部建立的是洗漱索引,所謂的稀疏索引指的是每隔一定的位元組數建立一條索引,這樣做的好處是索引檔案變小
稀疏索引圖如下
當需要按照offset查詢某個訊息,如果找到就直接返回,如果沒找到就按照類似於二分法的方式查詢
7、資料傳輸的事務定義
7.1、at most once:
最多一次,如果某個消費者C1消費了Topic T1中的某個資料,offset為儲存但依然fetch不到該資料
7.2、at least once:
至少一次,如果fetch到某條資料後offset沒有更改,此情況下依然能再次fetch到這條資料,推薦這種方式,畢竟多次消費資料比資料丟失要好得多
相關文章
- 架構-穩定性建設邏輯問題實戰總結架構
- iOS架構設計解耦的嘗試之VC邏輯AOP切割iOS架構解耦
- 軟體體系架構課堂測試07 –邏輯架構設計架構
- 億級流量架構實戰之秒殺設計架構
- 新零售SaaS架構:組織管理的底層邏輯與架構設計架構
- 阿里大牛實戰歸納——Kafka架構原理阿里Kafka架構
- Apache Kafka 程式設計實戰ApacheKafka程式設計
- 《微服務架構設計模式》讀書筆記 | 第5章 微服務架構中的業務邏輯設計微服務架構設計模式筆記
- C-04.MySQL邏輯架構MySql架構
- Java程式設計架構實戰——OKHTTP3原始碼和設計模式(上篇)Java程式設計架構HTTP原始碼設計模式
- 《MySQL 基礎篇》十:邏輯架構和儲存引擎MySql架構儲存引擎
- [原始碼解析] PyTorch 分散式之彈性訓練(4)---Rendezvous 架構和邏輯原始碼PyTorch分散式架構
- 架構設計之架構的演變架構
- HBase學習之Hbase的邏輯結構和物理結構
- 圖解 Kafka 原始碼之 NetworkClient 網路通訊元件架構設計圖解Kafka原始碼client元件架構
- Kafka的生產者優秀架構設計Kafka架構
- MySQL提升筆記(1):MySQL邏輯架構MySql筆記架構
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- 微商城之業務邏輯架構設計,B2B2C模式流程設計-OctShop免費開源商城系統架構模式
- SpringCloud Alibaba實戰(3:儲存設計與基礎架構設計)SpringGCCloud架構
- Kafka 原理和實戰Kafka
- 聊聊支付流程的設計與實現邏輯
- 專案實戰之元件化架構元件化架構
- 《Spring Boot 實戰紀實》缺失的邏輯Spring Boot
- 架構實戰架構
- MySQL調優篇 | 邏輯架構解讀(1)MySql架構
- 架構設計之“服務限流”架構
- 架構設計之資料分片架構
- 應用架構之道:分離業務邏輯和技術細節應用架構
- 聊聊訊息中心的設計與實現邏輯
- 遊戲機制設計:生活邏輯轉化為遊戲邏輯的設計形式遊戲
- 大曝光!從RabbitMQ平滑遷移至Kafka架構設計方案!MQKafka架構
- Node之道:設計、架構和最佳實踐 | Alex Kondov架構
- js逆向實戰之某天下登陸引數pwd加密邏輯JS加密
- 【架構設計的藝術】Kafka如何通過精妙的架構設計優化JVM GC問題?【石杉的架構筆記】架構Kafka優化JVMGC筆記
- DDD開源COLA應用架構-實現分離業務邏輯和技術細節應用架構
- Vue原始碼探究-資料繫結邏輯架構Vue原始碼架構
- 淺析HDFS架構和設計架構