1. 程式人生 > >消息隊列服務Kafka揭秘:痛點、優勢以及適用場景

消息隊列服務Kafka揭秘:痛點、優勢以及適用場景

cli 是什麽 占滿 事務 不同之處 消息系統 監控體系 流動 系列

摘要: 消息隊列Kafka是一個分布式的、高吞吐量、高可擴展性消息隊列服務,廣泛用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等,是大數據生態中不可或缺的產品之一,阿裏雲提供全托管服務,用戶無需部署運維,更專業、更可靠、更安全。本文就將帶你走進消息隊列Kafka。

摘要:消息隊列Kafka是一個分布式的、高吞吐量、高可擴展性消息隊列服務,廣泛用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等,是大數據生態中不可或缺的產品之一,阿裏雲提供全托管服務,用戶無需部署運維,更專業、更可靠、更安全。本文就將帶你走進消息隊列Kafka。

以下內容根據演講視頻以及PPT整理而成。

本期發布會視頻分享鏈接,戳這裏!請添加鏈接描述

本期發布會PPT下載鏈接,戳這裏!請添加鏈接描述

消息隊列Kafka
消息隊列Kafka是一個分布式的、高吞吐量、高可擴展性消息隊列服務。相比於Apache Kafka,消息隊列Kafka所提供的是全托管的服務。這裏也簡單地介紹一下Apache Kafka,Apache Kafka是一個分布式的基於push-subscribe的消息系統,它具備快速、可擴展、可持久化的特點。它現在是Apache旗下的一個開源系統,作為hadoop生態系統的一部分,目前被廣泛使用在大數據場景中。
技術分享圖片
而消息隊列 Kafka 針對Apache Kafka提供全托管服務,徹底解決開源產品長期以來的痛點。用戶只需專註於業務開發,無需部署運維,低成本、更彈性、更可靠。消息隊列產品最大的特點就是全托管服務,這裏主要涉及到兩個特性:兼容性和便捷性。首先,對於兼容性,消息隊列Kafka能夠100%兼容Apache Kafka,對於用戶而言,可使用各種語言的開源客戶端進行無縫接入,目前使用開源Kafka的用戶,只需要更改一個接入點就可以使用消息隊列Kafka產品。同時,消息隊列Kafka兼容Apache Kafka的所有生態。其次,對於便捷性而言,消息隊列Kafka不需要部署,用戶只要在購買消息隊列Kafka後,填入實例信息,15分鐘內就能使用消息隊列Kafka的服務了,因此是非常便捷易用的。

技術分享圖片
上述是對於消息隊列Kafka的整體介紹,接下來將分為痛點、優勢以及場景這三個模塊與大家進行較為細節的分享。首先將與大家分享目前阿裏雲針對於消息隊列服務所收集到的用戶痛點,以及根據這些痛點來解決問題,消息隊列Kafka所具備的優勢又是什麽,最後還將與大家介紹一下消息隊列Kafka所適用的場景。

一、痛點:自建Kafka的煩惱
Apache Kafka運維難度大

對於Kafka而言,從用戶視角來看,是一個非常簡單的產品,其所提供的是發布與訂閱模型。那麽,在對於Kafka進行運維方面而言,其難度又會非常大,這是因為它不僅僅需要關註整個集群之內像broker、controller類似的角色,還需要關註其所依賴的一些產品像ZooKeeper等。所以對於以上這些模塊的運維不僅僅涉及到參數的調優,同時隨著業務的增長,還會面臨擴縮容等問題。此外,還需要關註磁盤以及網絡情況。因此,綜上所述,自建Kafka的運維成本和運維難度都是非常大的。接下來就為大家分享一些具體的例子。

技術分享圖片
數據混亂
一些用戶反饋在自己使用Kafka集群的時候出現了數據混亂的問題。大家都知道,在Kafka集群裏面存在Controller和Broker兩種角色,在Controller出現異常的情況之下,會從Broker裏面自動地選擇一個Broker成為新的Controller。但是由於網絡等異常情況,最開始掛掉的Controller可能重新復活了,那麽在復活之後,對於整個集群而言就會出現“腦裂”的情況。因為Controller的主要職責是管理整個集群的分區和副本的狀態,而當出現“腦裂”就會造成數據混亂的問題,而這對於用戶而言,是不可接受的。
技術分享圖片
ZooKeeper不可用
整個Kafka集群對於ZK是強依賴的,而ZooKeeper的運維工作也是龐大而復雜的。比如在運維人員對於ZooKeeper不是非常了解的情況之下,可能不知道如何部署ZooKeeper,不知道如何保證ZK在同機房或者多機房的情況下保證其一定可用,而這些往往需要運維人員的思考和權衡。而ZooKeeper上面會存儲Kafka的重要數據,當ZK不可用的情況下,整個集群的災備選組以及存儲的數據都會受到影響。
技術分享圖片
帶寬關註
對於用戶而言,自建Kafka時不僅僅需要關註其外圍的依賴產品,其實還需要關註一個在集群內部經常會遇到的問題——帶寬。站在用戶的使用角度來看,經常需要做出對於副本數的權衡。而為了提升可靠性以及容災能力,集群往往需要三副本,而當副本數量一多,那麽就會涉及到機器之間的數據復制,這種情況就會增加網絡的帶寬。同時,由於Broker之間是對等的,並且需要從Controller裏面同步數據。這樣一來,Controller不僅僅需要承擔自己的本身的任務,還需要對外提供服務,而就其本身的設計而言,這兩部分任務是沒有優先級先後的,所以在集群規模大的情況之下,就會引發網絡帶寬的擁堵問題。而阿裏雲消息隊列Kafka就已經幫助用戶解決了上述問題了,用戶不需要去做備份之間的權衡,阿裏雲會幫助用戶實現數據的三副本存儲,並且使得服務可用性能夠達到99.9%
技術分享圖片
磁盤運維
用戶自建Kafka還會遇到其他的一些問題,比如磁盤的運維問題。從0.110版本之後,Consumer offsets不僅僅存儲在ZK端,其可以作為一個普通的Topic存儲在Kafka集群裏面。而整個Consumer offsets的留存策略決定了磁盤的占用情況,因此有可能因為設置了錯誤的參數導致磁盤的占用過高。同時,用戶經常看到的情況是:自己的集群有100T的磁盤,僅僅使用了幾十T就已經出現了不可寫的情況。大家都知道,在Producer裏面可以通過兩種方式對於數據進行分區,通過Hash可能會造成Hash的傾斜,而使用RoundBobin的方式也可能導致磁盤占用不均。對於用戶而言,其可能看到的情況是用戶明明購買了很多的磁盤,磁盤也沒有被占滿,但是Producer卻已經不可寫了。而關於磁盤運維的細節問題,消息隊列Kafka就已經幫助用戶解決掉了。
技術分享圖片
數據丟失
其實,對於用戶而言,最苦惱的就是數據丟失問題。Kafka為用戶提供了三種數據存儲策略,第一種可以認為是OneWay方式,第二種相當於將一個備份的數據落盤,最後一種相當於將所有備份數據落盤才能成功。對於這三種方式的選擇過程,其實就是可用性與性能之間的博弈。在網絡負載很高或者磁盤很難寫入的情況下,就可能造成磁盤寫入失敗。同時,Kafka的數據最開始是存儲在PageCache上面的,並且會定時地刷到磁盤上,但是並不是每條消息發送成功都會存儲在磁盤上的。如果出現斷電或者機器故障的情況,存儲在內存中的數據就會丟失。此外,還有一種情況就是當單批數據量超過限制也會丟失數據。而使用消息隊列Kafka,用戶就不需要去做這些數據上面的選型的博弈和考慮,因為只要消息隊列Kafka發送數據成功,那麽這些數據就會被持久化,保證了數據不會丟失。因為消息隊列Kafka做了這些優化,數據的可靠性就能夠達到8個9(即99.999999%)
技術分享圖片
二、優勢
在前面與大家分享了自建Kafka所遇到的痛點,接下來將會結合上述的痛點與大家分享阿裏雲消息隊列Kafka的優勢所在以及其是如何解決上述痛點的。

開箱即用
阿裏雲的消息隊列Kafka是開箱即用的,是100%兼容Apache Kafka的,原來正在使用Apache Kafka的用戶只需要更改接入點就可以無縫地接入,並且消息隊列Kafka也能夠支持開源版本所支持的各種客戶端,與此同時也能夠兼容Apache Kafka的全部生態。並且消息隊列Kafka不需要用戶進行部署,只需要在購買之後填入用戶的實例信息,在15分鐘之內就能使用消息隊列Kafka的服務,非常便捷。
技術分享圖片
全托管
當用戶購買了消息隊列Kafka之後,阿裏雲會對於整個集群進行維護並提供托管服務,這對於用戶而言,是完全的0維護成本。這樣的0維護成本又是怎樣做到的呢?阿裏雲消息隊列Kafka提供了秒級的健康巡檢以及自恢復體系,阿裏雲有專業的研發和運維團隊來保障整個健康巡檢的正常運行以及自動化維護體系的可實施性。對於用戶而言,健康巡檢是整個托管的基石。那麽阿裏雲又是如何為用戶提供健康巡檢的呢?為用戶所提供的健康巡檢又是哪些內容呢?其實可以分為三個層次,即機器維度、業務維度以及業務性能上面的運維。比如阿裏雲會關註網絡是否異常,磁盤是否故障這樣系統級別的運維和巡檢。此外,阿裏雲消息隊列Kafka還會提供業務級別的巡檢,將會關註生產和消費是否正常運行,也會關註Kafka對外提供的整體服務是否正常運行,這些都屬於業務層面上的巡檢。從性能上面,也會關註像磁盤IO請求的速度這樣指標,通過磁盤IO請求速度的變化推測出負載的情況,並進行一些告警以及自動化的處理。通過上述這樣的健康巡檢方式來檢測集群的健康狀況。
技術分享圖片
高可靠、高可用
對於消息隊列Kafka而言,它不僅僅對外承諾服務的數據可靠性達到了99.999999%以及服務的可用性達到了99.9%。消息隊列Kafka對外承諾的數據可靠性和服務可用性不僅僅是通過健康巡檢來保證的,同時還做了非常多的優化。這裏簡單介紹阿裏雲對於消息隊列Kafka所做的兩個優化。在存儲層,通過存儲與計算的分離來實現優化。其次,阿裏雲消息服務Kafka還提供了自動災備,而自動災備的範圍很大,這裏可以簡單列出幾點:第一點就是當一個Broker掛掉的時候,備用的Broker將會直接啟動起來,同時宕機的Broker的流量將會自動分配到存活的Broker上面,從而實現了業務完全無感知的效果。正是通過以上的方式,阿裏雲消息隊列Kafka實現了極高的數據可靠性以及服務的可用性,因此用戶根本無需擔心數據的可靠性以及服務可用性。
技術分享圖片
業務監控&報表
在系統層面,阿裏雲幫助用戶運維了整個集群,保證了可用性和可靠性。在此基礎之上,阿裏雲還為業務方提供了一整套的業務監控與報表體系。在這套業務監控體系裏面,主要還是通過三個維度進行,第一個維度就是實例,所謂實例就是用戶可以理解為自建的集群的一個概念,而實際上也就是一個集群,每個用戶購買一個實例的時候也就能得到一個真實的小的集群。對於實例而言,用戶所需關註的是其磁盤水位、生產者以及消費者的TPS會不會超過閾值這些異常情況。第二個維度是Topic,阿裏雲也提供了一些消息堆積的查詢情況,通過直觀的方式,用戶將能夠看到生產者是否在正常地生產著消息,而這在開源的Kafka實現裏面也是用戶的一個痛點。在開源方案中,沒有這種相應的運維工具,用戶很難直接去對生產者進行監控。最後一個維度,也是用戶使用非常多的就是Consumer Group與Topic對應的堆積情況,目前的堆積在後續也會提供延遲的各種消息。以上這三個是目前阿裏雲消息隊列Kafka所能夠提供的監控維度,未來也會根據用戶的反饋不斷增加相應的監控維度。
技術分享圖片
數據安全
消息隊列Kafka提供了一系列數據安全的保障體系來保證數據的安全。首先所提供就是專有網絡VPC,VPC網絡是基於阿裏雲構建的一個隔離的網絡環境,在專有網絡之間邏輯上徹底隔離。VPC網絡是屬於用戶自己獨有的雲上私有網絡,也就是提供給用戶的完全由自己掌控的專有網絡。理論上,部署在VPC私有網絡裏面就是安全的,不同用戶的雲服務器部署在不同的專有網絡,不同專有網絡之間通過隧道ID進行隔離。除此之外,有一些用戶還可能有更多的需求,比如政務雲用戶除了VPC的需求之外,還需要組件與組件之間的加密,這樣的場景阿裏雲也是支持的。此外,阿裏雲消息隊列Kafka還支黑白名單以及鑒權等功能,能夠通過多種的機制來保證數據的安全。
技術分享圖片
消息隊列Kafka的優勢
上述與大家分享的就是消息隊列Kafka的優勢,再來總結一下。消息隊列Kafka是完全兼容Apache Kafka的,Apache Kafka所能夠用到的整個生態的產品,比如上端的Flume等產品和下端的Spark、Storm、Flink以及ES等,對於消息隊列Kafka而言也是完全兼容的。其次,消息隊列Kafka所提供的是全托管的服務,也就是說無論集群中出現的是磁盤問題、網絡問題也好,無論是Kafka本身的還是其所依賴的產品所出現的任何問題,都是有專業團隊來解決的。對於用戶而言,所能夠看到的是產品99.9%的可用性,並且能夠為用戶帶來非常穩定的狀態,而底層的技術細節則是由阿裏雲專業的團隊來處理的。對於高可用以及高可靠這部分而言,其與全托管是存在強關聯的。對於數據的可靠性而言,都是每一個產品所最為重視的,因為當發生了數據的丟失,就可能使得整個的業務邏輯出現錯誤,進而引發一些重大的故障。而阿裏雲所承諾的是當用戶使用消息隊列Kafka發送消息,只要返回所發送的消息是成功的,那麽這個數據的可靠性就能夠達到8個9,這一點也是用戶所無需擔心的。同時,阿裏雲消息隊列為用戶提供了非常實用的業務報表以及靈活全面的業務監控體系,並且業務的監控和報表是基於用戶業務維度的,包括整個集群的磁盤水位、Topic以及Consumer Group在內的所有的用戶所關心的業務相關指標,這些內容都會沈澱在消息隊列Kafka的控制臺裏面,用戶直接登錄控制臺就能夠看到整體業務的運行情況。最後一點,運行在消息隊列Kafka上的數據是非常安全的,通過VPC網絡的隔離、鑒權、加密以及黑白名單這一系列的保障能夠保證用戶的數據是非常安全的,同時消息隊列Kafka所具有的一個巨大優勢就是其購買的每一個實例都是用戶購買所獨享的,用戶之間不會因為相互影響導致整個系統出現不穩定的情況。
技術分享圖片

三、場景
以上為大家介紹了消息隊列Kafka的優勢,接下來為大家分享其所適用的場景。其實,可以認為消息隊列Kafka與開源的Apache Kafka所適用的場景是一樣的,不同之處在於消息隊列Kafka具有更高的可靠性以及可用性,同時不需要用戶自己進行運維。

構建日誌分析平臺
淘寶、天貓平臺等公司每天都會產生大量的日誌。運營、運維團隊以及一些決策人員需要對於整個的日誌數據進行分析與統計。而Kafka本身的性能是非常高效的,同時Kafka的特性決定它非常適合作為"日誌收集中心",這是因為Kafka在采集日誌的時候業務是無感知的,其能夠兼容自己的上遊,能夠直接地通過配置加密消息。當日誌數據發送到Kafka集群裏面,其實對於業務而言是完全無侵入的。同時其在下遊又能夠直接地對接Hadoop/ODPS等離線倉庫存儲和Strom/Spark等實現實時在線分析。在這樣的情況之下,使用Kafka,只需要用戶去關註整個流程裏面的業務邏輯,而無需做更多的開發就能夠實現統計、分析以及報表。
技術分享圖片
網站活動跟蹤場景
除了實現數據分析形成報表之外,Kafka還可以實現網站活動跟蹤場景。通過Kafka可以實時地收集到網站的活動數據,比如用戶對於頁面的瀏覽、搜索以及行為等。消息隊列Kafka可以通過Topic來對於業務上面不同的數據模型進行切分的。那麽,用戶可以按照註冊或者登錄以及購買等進行切分,對於下遊所需要跟蹤的場景的不同,可以對接不同的處理系統,比如實時處理、實時監控以及離線處理,Kafka在這個場景裏面是非常便捷易用的。
技術分享圖片
數據在流動中產生價值
前面兩個例子是將消息隊列Kafka在整個解決方案裏面承擔的是數據輸入流的角色,而Kafka卻不僅僅可以充當數據的輸入流,還可以做流計算處理,比如股市走向分析、氣象數據測控、網站用戶行為分析等領域,由於在這些領域中數據產生快、實時性強、數據量大,所以很難統一采集並入庫存儲後再做處理,這便導致傳統的數據處理架構不能滿足需求。而Kafka Stream以及Storm/Samza/Spark等流計算引擎的出現,可以根據業務需求對數據進行計算分析,最終把結果保存或者分發給需要的組件。
技術分享圖片
多路轉發
大家經常會遇到的場景就是對於不同的業務維度而言,需要不同的計算方式,比如對於對賬系統而言,可能需要實時的流處理方式;對於統計分析而言,可以使用批計算方式。而使用Kafka能夠實現多路轉發,上遊生產一份數據,多個下遊節點都能夠獲取這份數據並做出相應的處理,因此Kafka可以完成數據多路轉發的功能。
技術分享圖片
消息隊列Kafka商業化發布
消息隊列Kafka已經在2018年7月1日正式地進行了商業化發布。目前在華北1、華北2、華東1、華東2、華南1這5個region可商業化使用了。目前VPC內部署已支持,預計在9月會推出非VPC版本,非VPC版本主要解決的是目前公網用戶的一些接入問題以及使用經典網絡的遺留存量用戶問題。在前期,消息隊列Kafka的主要精力投入在了穩定性相關以及成本優化問題方面,而在資源報警這部分功能排期在8月份上線。
技術分享圖片
而對於用戶而言,穩定性永遠處於第一位,最後通過本次分享希望用戶能夠記住:阿裏雲消息隊列Kafka是非常易用的,和開源版本的Kafka可以實現0成本切換,同時數據可靠性和服務可用性都是非常高的,用戶再也不用擔心由於Kafka的問題導致整個業務的癱瘓。相比於阿裏雲的另一款產品MQ而言,Kafka也有自己的清晰定位,就是在大數據的場景下使用Kafka,而在業務之間使用MQ。並且Kafka對於生態的對接能力是非常強大的,而MQ提供了一些增強的功能,比如事務、定時消息以及順序消息等。在本月是阿裏雲消息隊列Kafka的首月活動,包月將會給予8.5折優惠,則包年直接給到8折優惠。

原文鏈接請添加鏈接描述

本文為雲棲社區原創內容,未經允許不得轉載。

消息隊列服務Kafka揭秘:痛點、優勢以及適用場景