1. 程式人生 > >kafka使用(一)- 概念理解

kafka使用(一)- 概念理解

0. 概念

0.1 訊息系統

訊息系統負責將資料從一個應用程式傳輸到另一個應用程式,因此應用程式可以專注於資料,而不用擔心怎麼去共享它。

1)點對點訊息系統:

訊息被保留在佇列中,一個或多個消費者可以消耗佇列中的訊息,但是特定的訊息只能由一個消費者消費,一旦消費掉了,訊息就會從佇列中消失。

2)釋出-訂閱 訊息系統

訊息被保留在主題中,與點對點的系統不同,消費者可以訂閱一個或多個主題,並使用該主題中的所有訊息

0.2 LinkedIn開源

1)Databus 分散式資料同步系統
2)Cubert 高效能運算引擎
3)ParSeq Java一部處理框架
4)kafka 流處理平臺

1. kafka介紹

1.1 kafka工作流程

1.1.1 釋出-訂閱工作流程

1)生產者定期向主題傳送訊息
2)kafka代理儲存為該特定主題的分割槽中的所有訊息,它確保訊息在分割槽之間的平等共享
3)消費者訂閱特定的訊息
4)一旦消費者訂閱了相應的主題,kafka將會向消費者提供主題的當前便宜,並且還將儲存在zookeeper中
5)消費者將定期請求kafka的新訊息
6)一旦kafka收到來自生產者的訊息,它將這些訊息轉發給消費者
7)消費者將接受這些訊息並且進行處理
8)一旦訊息被處理了,消費者將向kafka代理髮送確認
9)一旦kafka收到確認,它將便宜改為新值,並在zookeeper中更新它
10)以上流程將重複,直到消費者停止請求
11)消費者可以隨時退回/跳到所需要的主題的偏移量,並閱讀所有後續的訊息

1.1.2 佇列訊息/使用者組的工作流

在佇列訊息傳遞系統而不是單個消費者中,具有相同的"組ID"的一組消費者將訂閱主題。簡單來說,訂閱具有相同groupid的主題的消費者被認為是單個組,並且訊息在他們之中共享。一下為工作流程“

1)生產者以固定間隔向某個主題傳送訊息
2)Kafka儲存在為該特定主題配置的分割槽中的所有訊息,類似於前面的方案
3)單個消費者訂閱特定主題,
4)kafka以釋出-訂閱訊息的方式同消費者互動,知道新的消費者以相同的組id訂閱相同的主題topic
5)一旦新的消費者到達,kafka將其操作切換為共享模式,並在兩個消費者之間共享資料
6)一旦消費者數量超過分割槽數量,新消費者將不會接收到任何進一步訊息,知道現有的消費者取消訂閱,出現這種情況是因為kafka中的每個消費者將被分配到至少一個分割槽,一旦所有分割槽都被分配給消費者之後,新的消費者必須等待

1.2 kafka 官方介紹

是一個分散式流處理平臺

1.3 基本概念

1)Producer:訊息和資料的生產者,向kafka的一個topic釋出訊息的程序/程式碼/服務
2)Consumer:訊息和資料的消費者,訂閱資料(Topic)並且處理其釋出的訊息的程序/程式碼/服務
3)Consumer Group:一個group只有一個consumer能消費這個訂閱的訊息
4)Broker:kafka叢集中的每個kafka節點
5)Topic:訊息的類別,對資料進行區分、隔離
6)Partition:一個Topic下的資料分散儲存在多個Partition上,Partition是有序的
  每個Topic被切分為多個partitions
  消費者數目少於或等於Partition的數目
  broker group中的每個brioker儲存topic的一個或多個partition,同一個partition不會被多個幾次儲存在多個broker上
  consumergroup中的僅有一個consumer讀取topic的一個或多個partitions,並且是唯一的consumer
7)Partition offset
  每個分割槽訊息具有稱為 offset 的唯一序列標識
8)Replication:一個partition可能有多個副本
  當叢集中有broker掛掉的情況下,系統可以主動使用replicas提供服務
  系統預設設定每個topic的replication係數為1,可以建立topic時單獨設定
  replication的劇本單位是topic的partition
  所有的讀和寫都是從leader進,followers只是為了做備份
  followers必須能夠即使複製leader的資料
  增加容錯性與可擴充套件性
9)Replication Leader:負責該partition與consumer的互動
10)ReplicaManager:負責管理當前的broker所有分割槽和副本的資訊,處理kafkaController發起的一些請求,副本狀態的切換、新增、讀取訊息等

1.4 kafka訊息結構

offset|length|crc32|magic|attributes|timestamp|key length|key|value length|value

1.5 api分類

Producer Api
Consumer Api
Streams Api
Connectors Api

1.6 kafka特點

1)分散式:多分割槽,多副本,多訂閱者,基於zookeeper排程(記錄broker、topic、partition資訊)
2)高效能:高吞吐量、低延遲、高併發、時間複雜度為O(1)
3)永續性與擴充套件性:資料可持久化、容錯性、支援線上水平擴充套件、訊息自動平衡(避免資料集中在某幾臺機器上導致頻繁地訪問某幾臺機器,產生一種熱點的問題)