Kafka基本概念
一.訊息
這裡的訊息可以看做資料庫裡的一個“資料行”或“一條記錄”。訊息由位元組陣列組成,對Kafka來說訊息裡的資料沒有特別的格式或含義。訊息可以有一個可選的後設資料--鍵,鍵也是一個位元組陣列,當訊息以可控方式寫入不同分割槽時,會用到鍵。如為鍵生成一個一致性雜湊值,對分割槽數進行取模,從而為訊息選擇寫入的分割槽。
二.主題(topic)與分割槽(partition)
Kafka的訊息通過topic進行分類。topic可以被分為若干個partition,一個partition就是一個提交日誌。訊息以追加的方式寫入partition,然後以先入先出的順序讀取訊息。
1.一個topic包含多個partition,因此無法再整個topic範圍內保證訊息的順序,但可以保證訊息在單個partition內的順序。如下圖所示的topic共有4個partition,訊息被追加寫入每個partition的尾部。partition可以分佈在不同的伺服器上,使得topic可以橫跨多個伺服器,以此來提供比單個伺服器更為強大的效能。
三.生產者和消費者
1.生產者
生產者(producer)建立訊息。生產者在預設情況下把訊息均衡地分分佈到topic的所有partition上,而不關心特定訊息會被寫到哪個partition。特定情況下會把訊息直接寫到指定的分割槽。這通常是通過訊息鍵和分割槽器來實現。
2.消費者
消費者(consumer)讀取訊息。消費者訂閱一個或多個主題,按照訊息生成的順序讀取它們。消費者通過檢查訊息的偏移量來區分已經讀取過的訊息。
2.1偏移量是另一種後設資料,是一個不斷遞增的整數值,在建立訊息時,生產者會把它新增到訊息裡。在給定的partition中,每個訊息的偏移量都是唯一的。消費者將每個partition最後讀取的訊息的偏移量儲存在Zookeeper或Kafka上,如果消費者關閉或者重啟,它的讀取狀態不會丟失。
2.2 消費者群組。消費者是消費者群組的一部分,一個群組內的消費者會共同讀取一個topic。但群組保證每個topic只能被一個消費者消費。如下圖中
群組中共有三個消費者同時讀取一個topic的訊息,其中兩個消費者各消費一個partition,另一個消費者消費其他兩個partition。消費者與partition之間的對映關係被稱為消費者對partition的所有權關係。