-
Kafka基礎組件
-
Topics(主題)
屬於特定類別的消息流稱爲主題。數據存儲在主題中。主題被拆分成分區。對於每個主題,Kafka保存一個分區的迷你媽媽。每個這樣的分區包含不可變有序序列的消息。分區被實現爲具有相等大小的一組分段文件。
-
Partition(分區)
主題可能有許多分區,因此它可以處理任意數量的數據。
-
Partition offset(分區偏移)
每個分區消息具有稱爲“offset”的唯一序列標識。
-
Replicas of Partition(分區備份)
副本只是一個分區的“備份”。副本從不讀取或寫入數據。它們用於方式數據丟失。
-
Brokers(經紀人)
代理是負責維護髮布數據的簡單系統。每個代理可以每個主題具有零個或多個分區。
假設,如果在一個主題和N個代理中有N個分區,每個代理將有一個分區。
假設,在一個主題中有N個分區並且多於N個代理(n+m),則第一個N代理將具有一個分區,並且下一個M代理將不具有用於改特定主題的任何分區。
假設,在一個主題中有N個分區並且小於N個代理(n-m),每個代理將在它們之間具有一個或多個分區共享。由於代理之間的負載分佈不相等,不推薦使用此方案。
-
Kafka Cluster(Kafka集羣)
Kafka有多個代理被稱爲Kafka集羣。可以擴展Kafka集羣,無需停機。這些集羣用於管理消息數據的持久性和複製。
-
Producers(生產者)
生產者是發送給一個或多個Kafka主題的消息的發佈者。生產者向Kafka經紀人發送數據。每當生產者將消息發佈給代理時,代理只需將消息附加到最後一個段文件。實際上,該消息將被附加到分區。生產者還可以向他們選擇的分區發送消息。
-
Consumers(消費者)
Consumers從經紀人處讀取數據。消費者訂閱一個或多個主題,並通過從代理中提取數據來使用已發佈的消息。
-
Leader(領導者)
“Leader”是負責給定分區的所有讀取和寫入的節點。每個分區都有一個服務器充當Leader。
-
Follower(追隨者)
跟隨領導者指令的節點被稱爲Follower。如果領導失敗,一個追隨者將自動成爲新的領導者。跟隨者作爲正常消費者,拉取消息並更新其自己的數據存儲。
-
-
Kafka集羣
-
Broker(代理)
Kafka集羣通常由多個代理組成以保持負載均衡。Kafka代理是無狀態的,所以他們使用Zookeeper來維護它們的集羣狀態。一個Kafka代理實例可以每秒處理數十萬次讀取和寫入,每個Broker可以處理TB級別的消息,而沒有性能影響。Kafka經紀人領導選舉由Zookeeper完成。
-
Zookeeper
Zookeeper用於管理和協調Kafka代理。Zookeeper服務主要用於通知生產者和消費者Kafka系統中存在任何新代理或Kafka系統中代理失敗。根據Zookeeper接收到關於代理的存在或失敗的通知,然後產品和消費者採取決定並開始與某些其他代理協調他們的任務。
Zookeeper中存儲Kafka的基本元數據,例如關於主題、代理、消費者偏移(隊列讀取器)等信息。
-
Producers(生產者)
生產者將數據推送給經紀人。當新代理啓動時,所有生產者搜索它並自動向該新代理髮送消息。Kafka生產者不等待來自代理的確認,並且發送消息的速度與代理可以處理的一樣快。
-
Consumers(消費者)
因爲Kafka代理是無狀態的,這意味着消費者必須通過使用分區偏移來維護已經消耗了多少消息。如果消費者確認特定的消息便宜,則意味着消費者已經消費了所有先前的消息。消費者向代理髮送異步拉取請求,以具有準備好消耗的字節緩衝區。消費者可以簡單地通過提供偏移值來快退或跳到分區中的任何點。消費者偏移值由Zookeeper通知。
-
-
Kafka工作流程
-
發佈-訂閱工作流程
- 生產者定期向主題發送數據
- Kafka Broker將所有消息存儲在該特定主題配置的分區,它確保消息在分區中平等共享
- 消費者訂閱主題
- Kafka向消費者提供主題的當前偏移,並將偏移量保存在Zookeeper中
- 消費者將定期請求Kafka新消息
- Kafka收到來自生產者的消息,將這些消息推送轉發給消費者
- 消費者消費處理消息,並向Kafka Broker發送確認
- Kafka收到確認後,更新偏移值,並更新Zookeeper中的偏移值
- 重複以上流程。消費者也可以隨時回退或跳轉到特定偏移量,閱讀消息
-
隊列消息/用戶組工作流程
- 生產者以固定間隔向某個主題發送消息
- Kafka Broker將所有消息存儲在該特定主題配置的分區,類似於“發佈-訂閱“的方案
- 單個消費者訂閱特定主題
- Kafka以“發佈-訂閱消息”相同的方式與消費者交互,直到新消費者以相同的“組ID”訂閱相同的主題
- 一旦新消費者接入,Kafka將其操作切換到共享模式,並在兩個消費者之間共享數據。此共享將繼續,直到用戶數達到爲該特定主題配置的分區數
- 一旦消費者的數量超過分區的數量,新消費者將不會接收任何進一步的消息,直到現有消費者取消訂閱,空出分區。
-