05.22 Kafka是否適合我們?

Kafka是否適合我們?

在過去的幾年中,Apache Kafka 的功能和覆蓋範圍已經有了很大的提高。500強公司中有三分之一在使用 Kafka,包括全球 Top10 銀行中的7家、Top10 保險公司中的8家、美國 Top10 電信公司中的9家。

首先我們看一下 Kafka 提供的2個核心功能:

(1)消息系統

消息被廣泛用於2中方式:

  • 隊列

隊列的消費者是一個worker組,每條消息只被其中的一個worker處理,高效的分攤了工作。隊列非常適合容錯和縮放。

  • 發佈/訂閱

訂閱者彼此獨立,每個訂閱者都會拿到每一條消息,就像一個廣播系統。

發佈/訂閱模式方便我們對系統進行解耦。

(2)流處理

有了一個健壯、可擴展的消息系統,如果能方便的對消息數據流進行處理就更好了。Kafka 的

Stream API正是提供了這個功能,它是一個 Java 客戶端庫,提供了比 producer和 consumer更高級別的抽象。

Stream API 可以輕鬆實現:

  1. 無狀態操作,例如信息流的過濾和轉換

  2. 有狀態操作,例如在一個時間窗口內的連接、聚合操作

流處理的示例代碼

從輸入流讀取文本,對每個單詞進行計數,然後把計數結果寫到輸出流

Kafka是否適合我們?

Kafka 的典型使用場景

  • 例如一個旅遊網站,酒店和機票的價格一直都在變。系統中的一些組件(例如價格告警、分析)需要得到這些變動通知。可以把變化信息發送到 Kafka topic 中,需要這些信息的組件作為訂閱者來獲取通知。

  • 可以使用kafka對網站行為(頁面瀏覽、搜索等用戶產生的行為)進行跟蹤和分析,事實上,這才是kafka的初始應用場景,LinkedIn 開發 kafka 時就是為了幹這個。不同類型的行為數據發送到不同的topic中,實時進行分析,來獲取用戶的參與度、頁面訪問路徑等有價值的數據,以支持網站的運營策略。

  • 比如你有大量的位置數據,需要實時處理,來跟蹤車輛路徑、距離等等。可以把設備發送過來的位置數據放到 Kafka,然後使用 Stream API 來處理,例如對指定時間區間的某個用戶的位置數據進行提取處理。

什麼時候不要使用 Kafka?

  • 對於需要與 kafka 集群進行溝通的服務,如果你不能或者不想使用 Java/Scala,那麼建議不要使用 Kafka,否則將無法使用 Stream API。

  • 如果你僅是需要一個任務隊列,那麼建議考慮使用 RabbitMQ。

  • 如果每天僅需要處理幾千條信息,那麼 Kafka 就有點重了。Kafka 適用於大規模的流處理,Kafka 的搭建和維護都需要不小的成本,所以如果處理量較小就不值得了。


分享到:


相關文章: