什麼是 Kafka?
Apache Kafka 是一種分散資料存放區,強化即時擷取與處理串流資料的能力。串流資料是由數千個資料來源持續產生的資料,通常會同時傳入資料記錄。串流平台需要處理持續湧入的資料,並且依序逐步處理資料。
Kafka 為其使用者提供三個主要功能:
- 發佈並訂閱記錄串流
- 按照記錄產生的順序有效地儲存記錄串流
- 即時處理記錄串流
Kafka 主要用於建置即時串流資料管道和適應資料串流的應用程式。它結合了簡訊、儲存和串流處理功能,以允許儲存和分析歷史和即時資料。
Kafka 有何作用?
Kafka 用於建置即時串流資料管道和即時串流應用程式。資料管道可靠地處理並將資料從一個系統移動到另一個系統,而串流應用程式則是取用資料串流的應用程式。例如,如果您想要建立一個接收使用者活動資料的資料管道,以追蹤使用者即時使用您網站的方式,則 Kafka 會用於擷取和儲存串流資料,同時為支援資料管道的應用程式提供讀取。Kafka 也經常用作訊息代理程式解決方案,即處理和調解兩個應用程式之間通訊的平台。
Kafka 如何運作?
Kafka 結合了兩種簡訊模型,即佇列和發佈-訂閱模型,為取用者提供每種模型的主要優點。佇列允許將資料處理分佈到許多取用者執行個體,使其具有高度擴展性。但是,傳統的佇列並非多訂閱者。發佈-訂閱方法採用多訂閱者,但由於每個訊息都傳送給每個訂閱者,因此無法用於在多個工作者程序中分佈工作。Kafka 使用分割的日誌模型將這兩個解決方案拼接在一起。日誌是一個已排序的記錄序列,並且這些日誌分成對應於不同訂閱者的區段或分割區。這意味著同一主題可以有多個訂閱者,並且每個訂閱者都被指派一個分割區以提供更高的擴展性。最後,Kafka 的模型提供了可重播性,這允許從資料串流讀取的多個獨立應用程式以自己的速率獨立工作。
佇列
發佈-訂閱
Kafka 的方法有哪些優點?
可擴展性
Kafka 的分割日誌模型允許將資料分佈到多個伺服器上,使其可擴展超出適合單一伺服器的內容。
快速
Kafka 將資料串流解耦,因此延遲非常低,可快速執行。
耐久
分割區分佈並複寫在許多伺服器之間,並且資料全部寫入磁碟。這有助於防止伺服器故障,使資料非常容錯和耐久。
Kafka 的架構如何整合不同模型?
Kafka 透過將記錄發佈到不同主題來對兩種不同模型進行補救。每個主題都有一個分割的日誌,這是一個結構化的提交日誌,其按順序追蹤所有記錄並即時附加新的記錄。這些分割區分佈在多個伺服器之間並進行複寫,可提供高擴展性、容錯性和平行性。每個取用者都會在主題中指派一個分割區,從而允許多訂閱者,同時保持資料的順序。透過結合這些簡訊模型,Kafka 提供了兩者的有點。Kafka 還透過將所有資料寫入到磁碟上和進行複寫,充當機具擴展性和容錯能力的儲存系統。依預設,Kafka 會將資料儲存在磁碟上,直到空間用完為止,但使用者也可以設定保留限制。Kafka 有四個 API:
- 生產者 API:用於將記錄串流發佈到 Kafka 主題。
- 取用者 API:用於訂閱主題並處理其記錄串流。
- 串流 API:允許應用程式作為串流處理器採取行動,這些處理器接收來自主題的輸入串流並將其轉換為輸出串流,這些輸出串流進入不同的輸出主題。
- 連接器 API:允許使用者無縫自動化將其他應用程式或資料系統新增到其目前 Kafka 主題中的動作。
Apache Kafka 和 RabbitMQ 之間有什麼區別?
RabbitMQ 是一個使用消息佇列方法的開放原始碼訊息代理程式。佇列分佈在節點叢集中,並可選擇複寫,其中每條訊息僅傳遞給單一取用者。
特性 |
Apache Kafka |
RabbitMQ |
架構 |
Kafka 使用分割日誌模型,它結合了簡訊佇列和發佈訂閱方法。 |
RabbitMQ 使用簡訊佇列。 |
可擴展性 |
Kafka 透過允許在不同的伺服器上分散分割區來提供可擴展性。 |
增加排入佇列的取用者數量,以擴大競爭取用者之間的處理規模。 |
訊息保留 |
以政策為基礎,例如,訊息可能會儲存一天。使用者可以設定此保留時段。 |
以確認為基礎,這意味著循序會在取用之後刪除。 |
多個取用者 |
多個取用者可以訂閱相同的主題,因為 Kafka 允許在特定的時間段中重播相同的訊息。 |
多個取用者都無法接收相同的訊息,因為訊息會在取用之後移除。 |
複寫 |
主題會自動複寫,但使用者可以手動設定不複寫的主題。 |
不會自動複寫訊息,但使用者可以手動設定要複寫的訊息。 |
訊息排序 |
由於採用分割的日誌架構,每個取用者都會按順序接收資訊。 |
訊息會按照其到達佇列的順序傳送給取用者。如果有競爭的取用者,每個取用者都會處理該訊息的一個子集。 |
通訊協定 |
Kafka 透過 TCP 使用二進位通訊協定。 |
透過外掛程式支援的進階簡訊佇列通訊協定 (AMQP):MQTT、STOMP。 |
AWS 如何支援您的 Kafka 要求?
在此處閱讀有關如何在 AWS 上手動部署 Kafka 的更多資訊。
AWS 還提供 Amazon MSK,這是 Apache Kafka 最相容、可用且最安全的全受管服務,可讓客戶填入資料湖資料、將變更串流至資料庫和從資料庫串流變更,以及為機器學習和分析應用程式提供支援。藉助 Amazon MSK,客戶可以減少管理基礎設施的時間,而將更多時間用於建置應用程式。 進一步了解 Amazon MSK。