天天看點

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

摘要:

消息隊列Kafka是一個分布式的、高吞吐量、高可擴充性消息隊列服務,廣泛用于日志收集、監控資料聚合、流式資料處理、線上和離線分析等,是大資料生态中不可或缺的産品之一,阿裡雲提供全托管服務,使用者無需部署運維,更專業、更可靠、更安全。本文就将帶你走進消息隊列Kafka。

以下内容根據演講視訊以及PPT整理而成。 本期釋出會視訊分享連結,戳這裡! 本期釋出會PPT下載下傳連結,戳這裡! 消息隊列Kafka

消息隊列Kafka是一個分布式的、高吞吐量、高可擴充性消息隊列服務。相比于Apache Kafka,消息隊列Kafka所提供的是全托管的服務。這裡也簡單地介紹一下Apache Kafka,Apache Kafka是一個分布式的基于push-subscribe的消息系統,它具備快速、可擴充、可持久化的特點。它現在是Apache旗下的一個開源系統,作為hadoop生态系統的一部分,目前被廣泛使用在大資料場景中。

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

而消息隊列 Kafka 針對Apache Kafka提供全托管服務,徹底解決開源産品長期以來的痛點。使用者隻需專注于業務開發,無需部署運維,低成本、更彈性、更可靠。消息隊列産品最大的特點就是全托管服務,這裡主要涉及到兩個特性:相容性和便捷性。首先,對于相容性,消息隊列Kafka能夠100%相容Apache Kafka,對于使用者而言,可使用各種語言的開源用戶端進行無縫接入,目前使用開源Kafka的使用者,隻需要更改一個接入點就可以使用消息隊列Kafka産品。同時,消息隊列Kafka相容Apache Kafka的所有生态。其次,對于便捷性而言,消息隊列Kafka不需要部署,使用者隻要在購買消息隊列Kafka後,填入執行個體資訊,15分鐘内就能使用消息隊列Kafka的服務了,是以是非常便捷易用的。

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

上述是對于消息隊列Kafka的整體介紹,接下來将分為痛點、優勢以及場景這三個子產品與大家進行較為細節的分享。首先将與大家分享目前阿裡雲針對于消息隊列服務所收集到的使用者痛點,以及根據這些痛點來解決問題,消息隊列Kafka所具備的優勢又是什麼,最後還将與大家介紹一下消息隊列Kafka所适用的場景。

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

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

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
資料混亂

一些使用者回報在自己使用Kafka叢集的時候出現了資料混亂的問題。大家都知道,在Kafka叢集裡面存在Controller和Broker兩種角色,在Controller出現異常的情況之下,會從Broker裡面自動地選擇一個Broker成為新的Controller。但是由于網絡等異常情況,最開始挂掉的Controller可能重新複活了,那麼在複活之後,對于整個叢集而言就會出現“腦裂”的情況。因為Controller的主要職責是管理整個叢集的分區和副本的狀态,而當出現“腦裂”就會造成資料混亂的問題,而這對于使用者而言,是不可接受的。

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

整個Kafka叢集對于ZK是強依賴的,而ZooKeeper的運維工作也是龐大而複雜的。比如在運維人員對于ZooKeeper不是非常了解的情況之下,可能不知道如何部署ZooKeeper,不知道如何保證ZK在同機房或者多機房的情況下保證其一定可用,而這些往往需要運維人員的思考和權衡。而ZooKeeper上面會存儲Kafka的重要資料,當ZK不可用的情況下,整個叢集的災備選組以及存儲的資料都會受到影響。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
帶寬關注

對于使用者而言,自建Kafka時不僅僅需要關注其外圍的依賴産品,其實還需要關注一個在叢集内部經常會遇到的問題——帶寬。站在使用者的使用角度來看,經常需要做出對于副本數的權衡。而為了提升可靠性以及容災能力,叢集往往需要三副本,而當副本數量一多,那麼就會涉及到機器之間的資料複制,這種情況就會增加網絡的帶寬。同時,由于Broker之間是對等的,并且需要從Controller裡面同步資料。這樣一來,Controller不僅僅需要承擔自己的本身的任務,還需要對外提供服務,而就其本身的設計而言,這兩部分任務是沒有優先級先後的,是以在叢集規模大的情況之下,就會引發網絡帶寬的擁堵問題。而阿裡雲消息隊列Kafka就已經幫助使用者解決了上述問題了,使用者不需要去做備份之間的權衡,阿裡雲會幫助使用者實作資料的三副本存儲,并且使得服務可用性能夠達到99.9%

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
磁盤運維

使用者自建Kafka還會遇到其他的一些問題,比如磁盤的運維問題。從0.110版本之後,Consumer offsets不僅僅存儲在ZK端,其可以作為一個普通的Topic存儲在Kafka叢集裡面。而整個Consumer offsets的留存政策決定了磁盤的占用情況,是以有可能因為設定了錯誤的參數導緻磁盤的占用過高。同時,使用者經常看到的情況是:自己的叢集有100T的磁盤,僅僅使用了幾十T就已經出現了不可寫的情況。大家都知道,在Producer裡面可以通過兩種方式對于資料進行分區,通過Hash可能會造成Hash的傾斜,而使用RoundBobin的方式也可能導緻磁盤占用不均。對于使用者而言,其可能看到的情況是使用者明明購買了很多的磁盤,磁盤也沒有被占滿,但是Producer卻已經不可寫了。而關于磁盤運維的細節問題,消息隊列Kafka就已經幫助使用者解決掉了。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
資料丢失

其實,對于使用者而言,最苦惱的就是資料丢失問題。Kafka為使用者提供了三種資料存儲政策,第一種可以認為是OneWay方式,第二種相當于将一個備份的資料落盤,最後一種相當于将所有備份資料落盤才能成功。對于這三種方式的選擇過程,其實就是可用性與性能之間的博弈。在網絡負載很高或者磁盤很難寫入的情況下,就可能造成磁盤寫入失敗。同時,Kafka的資料最開始是存儲在PageCache上面的,并且會定時地刷到磁盤上,但是并不是每條消息發送成功都會存儲在磁盤上的。如果出現斷電或者機器故障的情況,存儲在記憶體中的資料就會丢失。此外,還有一種情況就是當單批資料量超過限制也會丢失資料。而使用消息隊列Kafka,使用者就不需要去做這些資料上面的選型的博弈和考慮,因為隻要消息隊列Kafka發送資料成功,那麼這些資料就會被持久化,保證了資料不會丢失。因為消息隊列Kafka做了這些優化,資料的可靠性就能夠達到8個9(即99.999999%)

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

在前面與大家分享了自建Kafka所遇到的痛點,接下來将會結合上述的痛點與大家分享阿裡雲消息隊列Kafka的優勢所在以及其是如何解決上述痛點的。

開箱即用

阿裡雲的消息隊列Kafka是開箱即用的,是100%相容Apache Kafka的,原來正在使用Apache Kafka的使用者隻需要更改接入點就可以無縫地接入,并且消息隊列Kafka也能夠支援開源版本所支援的各種用戶端,與此同時也能夠相容Apache Kafka的全部生态。并且消息隊列Kafka不需要使用者進行部署,隻需要在購買之後填入使用者的執行個體資訊,在15分鐘之内就能使用消息隊列Kafka的服務,非常便捷。

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

當使用者購買了消息隊列Kafka之後,阿裡雲會對于整個叢集進行維護并提供托管服務,這對于使用者而言,是完全的0維護成本。這樣的0維護成本又是怎樣做到的呢?阿裡雲消息隊列Kafka提供了秒級的健康巡檢以及自恢複體系,阿裡雲有專業的研發和運維團隊來保障整個健康巡檢的正常運作以及自動化維護體系的可實施性。對于使用者而言,健康巡檢是整個托管的基石。那麼阿裡雲又是如何為使用者提供健康巡檢的呢?為使用者所提供的健康巡檢又是哪些内容呢?其實可以分為三個層次,即機器次元、業務次元以及業務性能上面的運維。比如阿裡雲會關注網絡是否異常,磁盤是否故障這樣系統級别的運維和巡檢。此外,阿裡雲消息隊列Kafka還會提供業務級别的巡檢,将會關注生産和消費是否正常運作,也會關注Kafka對外提供的整體服務是否正常運作,這些都屬于業務層面上的巡檢。從性能上面,也會關注像磁盤IO請求的速度這樣名額,通過磁盤IO請求速度的變化推測出負載的情況,并進行一些告警以及自動化的處理。通過上述這樣的健康巡檢方式來檢測叢集的健康狀況。

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

對于消息隊列Kafka而言,它不僅僅對外承諾服務的資料可靠性達到了99.999999%以及服務的可用性達到了99.9%。消息隊列Kafka對外承諾的資料可靠性和服務可用性不僅僅是通過健康巡檢來保證的,同時還做了非常多的優化。這裡簡單介紹阿裡雲對于消息隊列Kafka所做的兩個優化。在存儲層,通過存儲與計算的分離來實作優化。其次,阿裡雲消息服務Kafka還提供了自動災備,而自動災備的範圍很大,這裡可以簡單列出幾點:第一點就是當一個Broker挂掉的時候,備用的Broker将會直接啟動起來,同時當機的Broker的流量将會自動配置設定到存活的Broker上面,進而實作了業務完全無感覺的效果。正是通過以上的方式,阿裡雲消息隊列Kafka實作了極高的資料可靠性以及服務的可用性,是以使用者根本無需擔心資料的可靠性以及服務可用性。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
業務監控&報表

在系統層面,阿裡雲幫助使用者運維了整個叢集,保證了可用性和可靠性。在此基礎之上,阿裡雲還為業務方提供了一整套的業務監控與報表體系。在這套業務監控體系裡面,主要還是通過三個次元進行,第一個次元就是執行個體,所謂執行個體就是使用者可以了解為自建的叢集的一個概念,而實際上也就是一個叢集,每個使用者購買一個執行個體的時候也就能得到一個真實的小的叢集。對于執行個體而言,使用者所需關注的是其磁盤水位、生産者以及消費者的TPS會不會超過門檻值這些異常情況。第二個次元是Topic,阿裡雲也提供了一些消息堆積的查詢情況,通過直覺的方式,使用者将能夠看到生産者是否在正常地生産着消息,而這在開源的Kafka實作裡面也是使用者的一個痛點。在開源方案中,沒有這種相應的運維工具,使用者很難直接去對生産者進行監控。最後一個次元,也是使用者使用非常多的就是Consumer Group與Topic對應的堆積情況,目前的堆積在後續也會提供延遲的各種消息。以上這三個是目前阿裡雲消息隊列Kafka所能夠提供的監控次元,未來也會根據使用者的回報不斷增加相應的監控次元。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
資料安全

消息隊列Kafka提供了一系列資料安全的保障體系來保證資料的安全。首先所提供就是專有網絡VPC,VPC網絡是基于阿裡雲建構的一個隔離的網絡環境,在專有網絡之間邏輯上徹底隔離。VPC網絡是屬于使用者自己獨有的雲上私有網絡,也就是提供給使用者的完全由自己掌控的專有網絡。理論上,部署在VPC私有網絡裡面就是安全的,不同使用者的雲伺服器部署在不同的專有網絡,不同專有網絡之間通過隧道ID進行隔離。除此之外,有一些使用者還可能有更多的需求,比如政務雲使用者除了VPC的需求之外,還需要元件與元件之間的加密,這樣的場景阿裡雲也是支援的。此外,阿裡雲消息隊列Kafka還支黑白名單以及鑒權等功能,能夠通過多種的機制來保證資料的安全。

消息隊列服務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的優勢,接下來為大家分享其所适用的場景。其實,可以認為消息隊列Kafka與開源的Apache Kafka所适用的場景是一樣的,不同之處在于消息隊列Kafka具有更高的可靠性以及可用性,同時不需要使用者自己進行運維。

建構日志分析平台

淘寶、天貓平台等公司每天都會産生大量的日志。營運、運維團隊以及一些決策人員需要對于整個的日志資料進行分析與統計。而Kafka本身的性能是非常高效的,同時Kafka的特性決定它非常适合作為"日志收集中心",這是因為Kafka在采集日志的時候業務是無感覺的,其能夠相容自己的上遊,能夠直接地通過配置加密消息。當日志資料發送到Kafka叢集裡面,其實對于業務而言是完全無侵入的。同時其在下遊又能夠直接地對接Hadoop/ODPS等離線倉庫存儲和Strom/Spark等實作實時線上分析。在這樣的情況之下,使用Kafka,隻需要使用者去關注整個流程裡面的業務邏輯,而無需做更多的開發就能夠實作統計、分析以及報表。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
網站活動跟蹤場景

除了實作資料分析形成報表之外,Kafka還可以實作網站活動跟蹤場景。通過Kafka可以實時地收集到網站的活動資料,比如使用者對于頁面的浏覽、搜尋以及行為等。消息隊列Kafka可以通過Topic來對于業務上面不同的資料模型進行切分的。那麼,使用者可以按照注冊或者登入以及購買等進行切分,對于下遊所需要跟蹤的場景的不同,可以對接不同的處理系統,比如實時處理、實時監控以及離線處理,Kafka在這個場景裡面是非常便捷易用的。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
資料在流動中産生價值

前面兩個例子是将消息隊列Kafka在整個解決方案裡面承擔的是資料輸入流的角色,而Kafka卻不僅僅可以充當資料的輸入流,還可以做流計算處理,比如股市走向分析、氣象資料測控、網站使用者行為分析等領域,由于在這些領域中資料産生快、實時性強、資料量大,是以很難統一采集并入庫存儲後再做處理,這便導緻傳統的資料處理架構不能滿足需求。而Kafka Stream以及Storm/Samza/Spark等流計算引擎的出現,可以根據業務需求對資料進行計算分析,最終把結果儲存或者分發給需要的元件。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
多路轉發

大家經常會遇到的場景就是對于不同的業務次元而言,需要不同的計算方式,比如對于對賬系統而言,可能需要實時的流處理方式;對于統計分析而言,可以使用批計算方式。而使用Kafka能夠實作多路轉發,上遊生産一份資料,多個下遊節點都能夠擷取這份資料并做出相應的處理,是以Kafka可以完成資料多路轉發的功能。

消息隊列服務Kafka揭秘:痛點、優勢以及适用場景
消息隊列Kafka商業化釋出

消息隊列Kafka已經在2018年7月1日正式地進行了商業化釋出。目前在華北1、華北2、華東1、華東2、華南1這5個region可商業化使用了。目前VPC内部署已支援,預計在9月會推出非VPC版本,非VPC版本主要解決的是目前公網使用者的一些接入問題以及使用經典網絡的遺留存量使用者問題。在前期,消息隊列Kafka的主要精力投入在了穩定性相關以及成本優化問題方面,而在資源報警這部分功能排期在8月份上線。

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

而對于使用者而言,穩定性永遠處于第一位,最後通過本次分享希望使用者能夠記住:阿裡雲消息隊列Kafka是非常易用的,和開源版本的Kafka可以實作0成本切換,同時資料可靠性和服務可用性都是非常高的,使用者再也不用擔心由于Kafka的問題導緻整個業務的癱瘓。相比于阿裡雲的另一款産品MQ而言,Kafka也有自己的清晰定位,就是在大資料的場景下使用Kafka,而在業務之間使用MQ。并且Kafka對于生态的對接能力是非常強大的,而MQ提供了一些增強的功能,比如事務、定時消息以及順序消息等。在本月是阿裡雲消息隊列Kafka的首月活動,包月将會給予8.5折優惠,則包年直接給到8折優惠。