什麼是 Apache Kafka?

wongchaofan發表於2024-06-09

第一部分:資料整合挑戰

典型的企業透過各種應用程式收集資料,例如會計、計費、客戶關係管理網站等。這些應用程式中的每一個都有自己的資料輸入和更新流程。為了獲得業務的統一檢視,工程師必須在這些不同的應用程式之間開發定製的整合。

這些直接積分可以得到如下所示的複雜解決方案。

每次整合都會遇到各種困難

  • 協議——資料如何傳輸(TCP、HTTP、REST、FTP、JDBC……)

  • 資料格式——資料如何解析(二進位制、CSV、JSON、Avro……)

  • 資料模式與演變——資料如何形成以及可能如何變化

Apache Kafka 來救援

使用 Apache Kafka 作為資料整合層,資料來源將把資料釋出到 Apache Kafka,目標系統將從 Apache Kafka 獲取資料。這樣可以將源資料流和目標系統分離,從而實現簡化的資料整合解決方案,如下圖所示。

Apache Kafka 中的資料流是什麼?

資料流通常被認為是一種可能不受限制的資料序列。之所以使用流式傳輸這一名稱,是因為我們關心的是資料一經生成即可立即訪問。

組織中建立資料的每個應用程式都是潛在的資料流建立者。作為資料流的一部分建立的資料通常很小。資料流的資料吞吐量變化很大:一些流每秒會收到數萬條記錄,而一些流每小時會收到一兩條記錄。

Apache Kafka 用於儲存這些資料流(也稱為主題),然後允許系統執行流處理 - 對可能無窮無盡且不斷變化的資料來源執行持續計算的行為。一旦流被處理並儲存在 Apache Kafka 中,它可能會傳輸到另一個系統,例如資料庫。

資料流示例

以下是公司在現實世界中處理的一些資料流的示例

  • 日誌分析。現代應用程式包括數萬個微服務 - 所有這些微服務都會不斷生成日誌。這些日誌中充滿了可用於商業智慧、故障預測和除錯的資訊。那麼挑戰就是如何在一個地方處理這些生成的大量日誌資料。公司將日誌資料推送到資料流中以執行流處理。

  • 網路分析。流資料的另一個常見用途是網路分析。現代網路應用程式測量其網站上的幾乎所有使用者活動,例如按鈕點選、頁面瀏覽量。這些操作加起來很快。流處理允許公司在資料生成時處理資料,而不是在數小時後處理。

為什麼公司應該使用 Apache Kafka?

一旦公司有實時資料流需求,就必須建立一個流平臺。

Apache Kafka 是當今業界最受歡迎的資料流處理平臺之一,超過 80% 的財富 100 強公司都在使用它。Kafka 在其僅附加的日誌結構儲存介質之上提供了一個簡單的訊息佇列介面。它儲存事件日誌。資料分佈到多個節點。Kafka 具有高度可擴充套件性和對節點丟失的容錯能力。

Kafka 的部署規模從單個節點到數千個節點不等。除了 LinkedIn 之外,它還被 Netflix、Apple、Uber、Airbnb 等公司廣泛用於生產工作負載。Kafka 的建立者離開 LinkedIn,成立了自己的公司 Confluent,全身心投入 Kafka 及其生態系統。Apache Kafka 現在是 Confluent 維護的一個開源專案。

Apache Kafka 歷史

Kafka 是 LinkedIn 為滿足傳統訊息佇列系統無法滿足的內部流處理需求而建立的。其第一個版本於 2011 年 1 月釋出。Kafka 迅速流行起來,從那時起就成為 Apache 基金會最受歡迎的專案之一。

該專案目前主要由 Confluent 維護,並得到 IBM、Yelp、Netflix 等其他公司的幫助。

Apache Kafka 的用例有哪些?

Apache Kafka 的用例很多。其中包括針對不同業務應用程式的流處理。Apache Kafka 構成了一些著名流處理框架的儲存機制,例如 Apache Flink、Samza。

  • 訊息傳遞系統

  • 活動追蹤

  • 從許多不同位置收集指標,例如物聯網裝置

  • 應用程式日誌分析

  • 解耦系統依賴關係

  • 與 Spark、Flink、Storm、Hadoop 等大資料技術整合。

  • 事件源商店

Apache Kafka 哪些地方不太適合?

Apache Kafka 非常適合上面概述的用例,但在某些情況下,使用 Apache Kafka 是不可能或不推薦的:

  • 為移動應用程式或物聯網代理數百萬個客戶端:Kafka 協議不是為此而設計的,但存在一些代理來彌補這一差距。

  • 帶有索引的資料庫: Kafka 是一個事件流日誌,沒有內建的分析能力,也沒有複雜的查詢模型。

  • 物聯網的嵌入式實時技術:在嵌入式系統上執行這些用例有更低階別和更輕量的替代方案。

  • 工作佇列: Kafka 由主題而非佇列組成(與 RabbitMQ、ActiveMQ 和 SQS 不同)。佇列旨在擴充套件到數百萬個消費者,並在處理後刪除訊息。在 Kafka 中,資料在處理後不會被刪除,並且消費者無法擴充套件到主題中的分割槽數量之外。

  • Kafka 作為區塊鏈:Kafka 主題呈現出區塊鏈的一些特徵,其中資料附加在日誌中,並且 Kafka 主題可以是不可變的,但缺少區塊鏈的一些關鍵屬性,例如資料的加密驗證以及完整的歷史記錄儲存。

Kafka 在業界的具體應用情況如何?

Apache Kafka 在業界被廣泛使用。下面重點介紹一些用例。

  • Uber在其實時定價管道中廣泛使用 Kafka。Kafka 是將大量事件傳達給不同流處理計算的骨幹。Kafka 的速度和靈活性使 Uber 能夠根據現實世界中不斷變化的事件(可用司機數量及其位置、使用者及其位置、天氣事件、其他事件)調整其定價模型,並向使用者收取適當的費用以管理供需。

  • Netflix已將 Kafka 整合為其資料平臺的核心元件。他們在內部將其稱為 Keystone 資料管道。作為 Netflix Keystone 的一部分,Kafka 每天處理數十億個事件。為了說明 Kafka 可以處理的海量資料,Netflix 每天向 Kafka 傳送約 5000 億個事件和 1.3 PB 的資料。

許多人都不知道,Kafka 是我們每天享受的許多服務的核心,這些服務來自一些世界上最大的科技公司,例如 Uber、Netflix、Airbnb、LinkedIn、Apple 和 Walmart。

第 2 部分:Apache Kafka 核心概念的定義

現在我們已經從高層次瞭解了 Apache Kafka,讓我們深入瞭解如何使用該工具。在本部分中,我們將介紹 Kafka 主題、生產者和消費者的基礎知識。

什麼是 Kafka 主題?

Kafka 主題組織相關事件。例如,我們可能有一個名為日誌的主題,其中包含來自應用程式的日誌。主題大致類似於 SQL 表。但是,與 SQL 表不同,Kafka 主題不可查詢。相反,我們必須建立 Kafka 生產者和消費者來利用資料。主題中的資料以二進位制格式儲存在鍵值形式中。

什麼是 Kafka 生產者?

在 Kafka 中建立主題後,下一步就是將資料傳送到主題。將資料傳送到主題的應用程式稱為 Kafka 生產者。向 Kafka 生產事件的方法有很多,但應用程式通常會與 Java、Python、Go 等語言的 Kafka 客戶端庫以及許多其他語言整合。

請注意,Kafka 生產者部署在 Kafka 外部,僅透過將資料直接傳送到 Kafka 主題來與 Apache Kafka 互動。

什麼是 Kafka 消費者?

一旦建立了主題並將資料生成到主題中,我們就可以使用資料流的應用程式了。從一個或多個 Kafka 主題中提取事件資料的應用程式稱為 Kafka 消費者。有很多方法可以從 Kafka 消費事件,但應用程式通常與 Java、Python、Go 等語言的 Kafka 客戶端庫以及許多其他語言整合。預設情況下,消費者僅消費消費者首次連線到主題後生成的資料。

請注意,Kafka 消費者部署在 Kafka 外部,僅透過直接從 Kafka 主題讀取資料與 Apache Kafka 互動。

第 3 部分:Kafka 生態系統

多年來,人們為 Kafka 開發了許多其他工具和庫來擴充套件其功能。在本節中,我們將介紹更廣泛的 Kafka 生態系統中一些最受歡迎的部分。

什麼是 Kafka Streams?

一旦我們將來自外部系統的資料匯入 Kafka,我們可能希望使用流處理應用程式來處理這些資料。流處理應用程式利用 Apache Kafka 等流資料儲存來提供實時分析。

例如,假設我們有一個名為的 Kafka 主題,twitter_tweets它是 Twitter 上所有推文的資料流。從這個主題中,我們可能想要:

  • 僅過濾有超過 100 個10贊或回覆的推文,以捕獲重要的推文

  • 1計算每分鐘每個主題標籤收到的推文數量

  • 結合兩者即可實時獲取熱門話題和主題標籤!

為了在 Apache Kafka 中執行主題級轉換,我們可以使用專門針對此用例的流庫,而不必編寫非常複雜的生產者和消費者程式碼。

在這種情況下,我們可以利用 Kafka Streams 庫,這是一個與 Apache Kafka 一起釋出的流處理框架。您可能聽說過 Kafka Streams 的替代方案是 Apache Spark 或 Apache Flink。

什麼是 Kafka Connect?

為了將資料匯入 Apache Kafka,我們發現需要利用 Kafka 生產者。隨著時間的推移,我們注意到許多公司共享相同的資料來源型別(資料庫、系統等),因此編寫開源標準化程式碼可能對更大的利益有幫助。同樣的想法也適用於 Kafka 消費者。

Kafka Connect 是一款允許我們將流行系統與 Kafka 整合的工具。它允許我們重複使用現有元件將資料匯入 Kafka 並將資料從 Kafka 匯出到其他資料儲存。

流行的 Kafka 聯結器示例包括:

  • Kafka Connect 源聯結器(生產者):資料庫(透過 Debezium 聯結器)、JDBC、Couchbase、GoldenGate、SAP HANA、區塊鏈、Cassandra、DynamoDB、FTP、IOT、MongoDB、MQTT、RethinkDB、Salesforce、Solr、SQS、Twitter 等……

  • Kafka Connect Sink 聯結器(消費者): S3、ElasticSearch、HDFS、JDBC、SAP HANA、DocumentDB、Cassandra、DynamoDB、HBase、MongoDB、Redis、Solr、Splunk、Twitter

什麼是 Schema Registry?

Schema Registry 可幫助在 Apache Kafka 中註冊資料模式,並確保生產者和消費者在發展過程中相互相容。它支援 Apache Avro、Protobuf 和 JSON 模式資料格式。

如果沒有模式登錄檔,當資料模式發生變化時,生產者和消費者就面臨中斷的風險。

什麼是 Conduktor?

Conduktor 平臺是用於 Kafka 開發的完整端到端解決方案,涵蓋 Kafka 管理、測試、監控、資料質量和資料治理。它允許開發人員與整個 Kafka 生態系統進行互動,例如 Broker、Topics、Consumers、Producers、Kafka Connect 和 Confluent Schema Registry。

什麼是 ksqlDB?

ksqlDB 是一個流處理資料庫,它提供類似 SQL 的介面來轉換 Kafka 主題並對流資料執行類似資料庫的常見操作,例如連線、聚合、過濾和其他形式的資料操作。

在後臺,ksqlDB web 伺服器將 SQL 命令轉換成一系列 Kafka Streams 應用程式。

相關文章