Kafka基於提交日誌並存儲來自生產者的鍵值對或消息。生產者向Kafka代理發送數據,他們本質上是消息的發布者。
消息流稱為Topic,用於存儲特定類別的數據。這些主題可以劃分為分區,在每個分區中,使用時間戳對消息進行索引。
每個分區消息包含一個名為Offset的惟一序列id。分區有稱為副本的備份,主要用於防止數據丟失。它們不讀取或寫入數據。
流的處理通過Kafka streams API進行,該API允許在Java應用程序中消費Kafka的數據,然後將結果寫回Kafka。
Kafka運行在有一個或多個服務器的集群上。這些服務器也稱為broker,負責維護已發布的數據。分區分布在各個節點上,並複製到代理。每個代理每個主題可以不包含任何分區。
消費者通過從代理讀取數據和訂閱主題來使用已發布的消息。每個分區由一個Leader組成,Leader節點負責該特定分區的所有讀寫操作。跟隨者節點是指服從領導下達的指令的節點。如果一個領導者失敗了,一個追隨者將取代他們的位置。
這種架構允許Kafka高效地工作,並容忍故障而不停機。這就是為什麼Kafka可以更好地替代傳統的消息傳遞係統,如高級消息隊列協議(AMQP)和Java消息服務(JMS)等。
Kafka集群由多個代理和它們各自的分區組成。雖然一個Kafka集群對本地開發是有益的,但多個集群提供了幾個優點來簡化工作。
這些包括:
- 數據類型的隔離
多個集群允許用戶輕鬆地從各種代理獲取或隔離數據。
- 安全隔離
Apache Kafka提供的安全措施允許將大量數據存儲在具有單獨安全需求的獨立數據中心。
- 多數據中心
通過多個數據中心,在發生災難時很容易恢複數據。數據由數據中心複製,以便在發生崩潰或任何不希望發生的事件時,可以恢複數據。