Kafka-為什么選擇kafka(kafka的優點)
多個生產者
kafka可以無縫的支持多個生產者,不管客戶端在使用單個主題還是多個主題。所以它很適合用來從多個前端系統手機數據,並以同一的格式對外提供數據。
例如:一個包含了多個微服務的網站,可以為頁面視圖創建一個單獨的主題,所有服務都以相同的消息格式向該主題寫入數據。消費者應用程序會獲得統一的頁面視圖,而無需協調來自不同生產者的數據流。
多個消費者
kafka支持多個消費者從一個單獨的消息流上讀取數據,而且消費者之間互不影響。這與其他隊列系統不同,其他隊列系統的消息一旦被一個客戶端讀取,其他客戶端就無法再讀取它。
另外,多個消費者可以組成一個群組,它們共享一個消息流,並保證整個群組對每個給定的消息只處理一次。
基於磁盤的數據存儲
kafka允許消費者非實時地讀取消息,這要歸功於kafka的數據保留特性。
消息被提交到磁盤,根據設置的保留規則進行保存。每個主題可以設置單獨的保留規則,以便滿足不同消費者的需求,各個主題可以保留不同數量的消息。
消費者可能會因為處理速度慢或突發的流量高峰導致無法及時讀取消息,而持久化數據可以保證數據不會丟失。
消費者可以被關閉,但消息會繼續保留在kafka里。消費者可以從上次中斷的地方繼續處理消息。
伸縮性
為了能夠處理大量數據,kafka從一開始就被設計成一個具有靈活伸縮性的系統。
用戶在開發階段可以額先使用單個broker,再擴展到包含三個broker的小型開發集群,然后隨着數據量不斷增長,部署到生產環境的集群可能包含上百個broker。對在線集群進行擴展,絲毫不影響整體系統的可用性。一個包含多個broker的集群,即使個別broker失效,仍然可以持續地為客戶提供服務。要提高集群的容錯能力,需要配置較高的復制系數。
高性能
通過橫向擴展生產者、消費者和broker,kafka可以輕松處理巨大的消息流。在處理大量數據的同時,它還能保證亞秒級的消息延遲。
使用場景
1.活動追蹤
kafka最初的使用場景是跟蹤用戶的活動。網站用戶與前端應用程序發生交互,前端應用程序生成用戶活動相關的消息。這些消息可以是一些靜態的信息,比如頁面訪問次數和點擊量,也可以是一些復雜的操作,比如添加用戶資料。這些消息被發布到一個或多個主題上,由后端應用程序負責讀取。這樣,我們就可以生成報告,為機器學習系統提供數據,更新搜索結果,或者實現其他更多功能。
2.傳遞消息
kafka的另一個基本用途是傳遞消息。應用程序向用戶發送通知就是通過傳遞消息來實現的。
這些應用程序組件可以生成消息,而不需要關心消息的格式,也不需要關心消息時如何被發送的。一個公共應用程序會讀取這些消息,對它們進行處理:
l 格式化消息
l 將多個消息放在同一個通知里發送
l 根據用戶配資的首選項來發送數據
使用公共組件的好處在於,不需要在多個應用程序上開發重復的功能,而且可以再公共組件上做一些有趣的轉換,比如把多個消息聚合成一個單獨的通知,而這些工作是無法在其它地方完成的。
3.度量指標和日志記錄
kafka也可以用於收集應用程序和系統度量指標以及日志。
應用程序定期把度量指標發布到kafka主題上,監控系統或告警系統讀取這些消息。
kafka也可以用在像Hadoop這樣的離線系統上,進行較長時間片段的數據分析,比如年度增長走勢預測。
日志消息也可以被發布到kafka主題上,然后被路由到專門的日志搜索系統(比如ES)或安全分析應用程序。更改目標系統不會影響到前端應用或聚合方法。
4.提交日志
kafka的基本概念來源於提交日志,所以使用kafka作為提交日志是件順理成章的事。我們可以把數據庫的更新發布到kafka上,應用程序通過監控事件流來接收數據庫的實時更新。這種變更日志流也可以用於把數據庫的更新復制到遠程系統上,或者合並多個應用程序的更新到一個單獨的數據庫視圖上。數據持久化為變更日志提供了緩沖區,如果消費者應用程序發生故障,可以通過重放這些日志來恢復系統狀態。
緊湊型日志主題只為每個鍵保留一個變更數據,所以可以長時間使用,不需要擔心消息過期問題。
5.流處理
流處理是有一個能提供多種類型應用程序的領域。操作的是實時數據流,較小的時間片段,而Hadoop處理更長時間片段的數據,可能是幾個小時或者幾天,Hadoop會對這些數據進行批處理。