kafka概念原理
為什麽需要消息系統:由於消息發送者不需要等待消息接收者處理數據就可以返回,系統具有更好的響應延時,同時,在網站訪問高峰,消息可以暫時存儲在消息隊列中等待消息接收者根據自己負載處理能力控制消息處理速度,減輕數據庫等後端存儲的負載壓力
1.解耦:允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。
2.冗余:消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失風險。許多消息隊列所采用的"插入-獲取-刪除"範式中,在把一個消息從隊列中刪除之前,需要你的處理系統明確的指出該消息已經被處理完畢,從而確保你的數據被安全的保存直到你使用完畢。
3.擴展性:因為消息隊列解耦了你的處理過程,所以增大消息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。
4.靈活性 & 峰值處理能力:在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量並不常見。如果為以能處理這類峰值訪問為標準來投入資源隨時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵組件頂住突發的訪問壓力,而不會因為突發的超負荷的請求而完全崩潰。
5.可恢復性:系統的一部分組件失效時,不會影響到整個系統。消息隊列降低了進程間的耦合度,所以即使一個處理消息的進程掛掉,加入隊列中的消息仍然可以在系統恢復後被處理。
6.順序保證:在大多使用場景下,數據處理的順序都很重要。大部分消息隊列本來就是排序的,並且能保證數據會按照特定的順序來處理。(Kafka 保證一個 Partition
7.緩沖:有助於控制和優化數據流經過系統的速度,解決生產消息和消費消息的處理速度不一致的情況。
8.異步通信:很多時候,用戶不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許用戶把一個消息放入隊列,但並不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。
kafka的關鍵特性:
1.kafka具有近乎實時性的消息處理能力。kafka將消息保存在磁盤中。采用順序讀寫的訪問磁盤。從而避免了隨機讀寫磁盤的性能瓶頸。
2.kafka支持批量讀寫消息。並且會對消息進行批量壓縮。這樣提高了網絡的利用率。也提高了壓縮效率。
3.kafka支持消息分區。分區之間可以並發操作。支持現在擴容
4.kafka支持副本。每個分區都有自己的副本。副本中有一個負責讀寫的leader。其他副本負責與Leader進行同步。
kafka相關的原因:
1.producer:消息生產者,發布消息到 kafka 集群的終端或服務。
2.broker:kafka 集群中包含的服務器。
3.Topic(話題):每條發布到 kafka 集群的消息屬於的類別,即 kafka 是面向 topic 的。
4.partition:partition 是物理上的概念,每個 topic 包含一個或多個 partition。kafka 分配的單位是 partition。
5.consumer:從 kafka 集群中消費消息的終端或服務。
6.Consumer group:high-level consumer API 中,每個 consumer 都屬於一個 consumer group,每條消息只能被 consumer group 中的一個 Consumer 消費,但可以被多個 consumer group 消費。
7.replica:partition 的副本,保障 partition 的高可用。
8.leader:replica 中的一個角色, producer 和 consumer 只跟 leader 交互。
9.follower:replica 中的一個角色,從 leader 中復制數據。
10.controller:kafka 集群中的其中一個服務器,用來進行 leader election 以及 各種 failover。
11.ISR:In-Sync-Replica集合表示的是目前”可用“(alive)且消息量與leader相差不多的副本集合。這是整個副本集合的一個子集。”可用“和”相差“不多都是很模糊的描述,其實際含義是ISR集合中的副本必須滿足下面兩個條件:
(1)副本所在節點必須維持著與zookeeper的連接
(2)副本最後一條消息的offset與Leader副本的最後一條消息的offset之間的差異不能超出指定的閾值。
12.HW(HighWatermark)和LEO與上面的ISR集合緊密相關。HW標記了一個特殊的offset。當消費者處理消息的時候,只能拉取到HW之前的消息。HW之後的消息對消費者來說是不可見的。與ISR集合類似,HW也是由Leader副本管理的。當ISR集合中全部的Follower副本都拉取HW指定的消息進行同步後。Leader副本會遞增HW的值。kafka官網網站將HW之前的消息的狀態稱為"commit",其含義是這些消息在多個副本中同時存在,即使此時Leader副本損壞,也不會出現數據丟失。
13.LEO(Log End Offset)是所有的副本都會有的offset標記。它指向追加到當前副本的最後一個消息的offset。當生產者向Leader副本追加消息的時候。Leader副本的LEO的標記會遞增。當Follower副本成功從Leader副本拉取消息並更新到本地的時候。Follower副本的LEO就會遞增。
14.zookeeper:kafka 通過 zookeeper 來存儲集群的 meta 信息。
15.Push 推送數據
16.Pull (fetch)拉數據
17.Append 追加
18.stack棧和queue隊列 隊列先進先出,棧先進後出
本文出自 “asinego” 博客,謝絕轉載!
kafka概念原理