Kafka基礎概念

Kafka有什麼用途?

舉例有如下場景:
1. 當前有一個接口提供創建用戶一個草稿評論
2. 檢查草稿後,若合法則將其推到線上,發現違禁字則刪除。
3. 若刪除則記錄用戶不合法次數+1
4. 推到線上後將文章評論數+1,並通知文章作者收穫了一條評論
5. 。。。。

上述操作的後續操作可以無限拓展下去,如果放在一個“創建評論”中寫完未免過於冗長。站在事件驅動的角度來看,好像一滴水滴入湖中,引發起不斷的波瀾。那麼有沒有一種方式能使操作專注於本身的修改,後續的操作由它們自己發現並開始呢?答案是使用消息隊列
Kafka就是這樣一種消息隊列。使用Kafka我們可以將上述場景改爲:
1. 創建草稿評論後,發送一條comment_create的消息
2. 發現一條comment_create消息,消費者檢查評論是否合法,並選擇刪除或通過評論。若通過發送一條comment_created,不通過發送一條comment_illegal
3. 發現一條comment_created消息,消費者向文章作者發推送,將文章評論數+1
4. 發現一條comment_illegal消息,消費者將用戶置爲不合法

可以看到上述操作像是一道水波,從1開始擴展到2,再擴展到3或4,並且其中每一步都是異步的。

什麼是生產者與消費者

Producer生產者生產消息,被指定的Consumer消費者消費掉。

什麼是Topic

Kafka每個消息都需要指定一個Topic,每個Producer發送消息都需要指定一個Topic作爲目標。而Consumer也是從對應的Topic中拉取消息(實際不止是這樣)。

什麼是分組(Group)

每個Consumer屬於一個consumer Group,每個Group可以有多個Consumer。每個Group可以訂閱一個Topic,發送到Topic的消息,會發送給每一個了此Topic的Group。
而Group每次收到消息會隨機選定自己的一個Consumer來消費。示意圖如下:

這裏寫圖片描述

什麼是Partition(分區)

到這裏開始就涉及一些各深層的概念了:每個Topic將被分成多個Partition(區),一個消息到來時會根據Producer指定的算法存儲在某個Partition中,就是說把數據分開存儲,避免單臺Kafka實例存儲的數據量過大。此外越多的partitions意味着可以容納更多的consumer,有效提升併發消費的能力(具體原理參見下文)

任何發佈到某個Partition的消息都會被直接追加到它的log文件的尾部,每條消息在文件中的位置稱爲offset(偏移量),offset爲一個long型整數,用於唯一標記一條消息。

什麼是Replica(備份)

Kafka可以指定每個Partition的備份數,這樣即使一臺機器崩了,備份數據的機器可以立即生效。
如果每個Partition都有多個備份,那麼選擇哪一臺來讀寫呢?這就涉及到Leader的概念,在Kafka裏會選定Partition的一臺實例作爲Leader,其它所有的作爲Follower。
Leader負責所有的讀寫,如果它失效了,那麼將會有其他Follower來接管爲新Leader。而在正常情況下,所有的Follower只是單調的向Leader請求最新數據(同步數據)。

由此可見作爲Leader的服務器承載了全部的請求壓力,因此從集羣的整體考慮,有越多個Partitions就意味着有越多個”Leader”,也就更能確保整體的穩定性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章