為什麼會有kafka
起源是數據集成,從不同地方拿數據,數據流非常的亂
數據集成超麻煩,你往往會發現你用在收集整理數據的時間是最多的,像這樣
隨著時代的發展,會有各種各樣的新數據,特點:實時的,不斷產生,量大
數據有兩種:一種是數據庫數據,比如用戶、產品等關係型數據;另一種是實時的數據,比如數據(包括用戶點擊、瀏覽等),應用數據(包括CPU的使用等)和log。
因此有了各種各樣的新系統來處理這些數據
但是這些數據產生後,產生的問題:數據爆炸
如果不同的數據用不同的數據庫來存儲監控,不同應用要從不同的地方取得需要的數據,就會這樣(炸了)
問題:
數據源多
數據傳輸可靠性
數據一致性
所以Kafka出現了,把數據集成這個環節做的簡潔高效,像這樣
解決辦法就是通過一個統一的部件來做數據的採集傳輸
Kafka把這個過程抽象了一下變成了這樣(眼熟不眼熟,就是生產者消費者模型呀):
kafka設計的基本原則
- 一個流能不能解決所有問題
- 不僅僅是消息系統,而是一個流處理系統
- 不僅是單臺,而是clusters
特性:
- 支持大數據,高吞吐
- 保證消息的有序
- 數據持久化
- 支持分佈式
Kafka最核心的是log,什麼是log呢,log就是記錄什麼時間發生了什麼事
log抽象起來就是有序序列
如果log非常多,就進行partition
當log很多就要做成分佈式,對log分區,每個partition是獨立的、不交互的,這樣避免了partition之間的協調,非常高效。像這樣:
那為什麼不考慮不同partition之間的順序呢?因為複雜度
工作流程就是數據源(生產者)將數據寫入log,消費者從log中提取數據,log起到了一個消息隊列的作用。所以Kafka就是一個基於分佈式log實現的,具有發佈/訂閱功能的消息系統。
如何應用kafka
分佈式系統
數據集成
實時計算
例子:
各個公司的ceo,如果其中某一個消息丟了怎麼辦
做法就是講所有事件都排成有序隊列,保證消息不丟
數據集成
因為Kafka用log記下了所有時間發生的所有事,任何一個狀態都可以被恢復出來。Kafka的理念就是實時處理就是log加計算(Job),像這樣:
參考的視頻:https://www.youtube.com/watch?v=aJuo_bLSW6s
總結
- 生活就是由一系列log組成
- 世界只是log某一個時刻的快照
- kafka本質上是一個基於分佈式log的發佈/訂閱消息系統
閱讀更多 程序猿的進擊之路 的文章