天天看點

Netflix資料管道的變化曆程

Netflix資料管道的變化曆程

去年12月我們的keystone資料管道正式投入使用,本文我們就來講講這些年netflix資料管道的變化曆程。

資料是netflix的中心,很多的商業決策和産品設計都是依據資料分析而做出的決定。在netflix,資料管道的目的是對資料進行收集歸納和處理,幾乎我們所有的應用都會用到資料管道。下面我們先來看看有關netflix資料管道的一些統計資料:

每天約5000億個事件,1.3pb的資料

高峰時段約每秒800萬個事件,24gb資料

我們用另外的atlas系統來管理營運相關的資料是以它并沒有出現在上面的清單中。

由于需求的變化和技術的進步,過去幾年我們的資料管道發生了很大的改變。下面我們就來介紹一下。

v1.0 chukwa資料管道

最初資料管道唯一的目的就是把事件資訊上傳到hadoop/hive。如下圖中所示,整個架構是比較簡單的。chukwa收集事件資訊并将sequencefile寫入亞馬遜s3,之後大資料平台部門會進一步處理并寫入hive。從事件發生到以parquet格式寫入hive整個過程不超過十分鐘,對于每小時甚至每天才運作一次的batch job來說已經足夠了。

Netflix資料管道的變化曆程

v1.5 能夠進行實時處理的chukwa資料管道

随着kafka和elasticsearch等技術的發展,公司内部對于實時分析的需求愈加強烈,我們必須保證處理所需時間在一分鐘之内。

Netflix資料管道的變化曆程

除了将資料寫入s3,chukwa還可以将資料發送到kafka,新的實時分支(虛線框住的部分)處理的事件大約占到總事件的30%。處于實時處理分支中心位置的是事件路由子產品,它負責将資料從kafka傳遞到elasticsearch和下一級kafka(進行資料的篩選)。終端使用者可以自由選擇趁手的工具進行分析,比如mantis、spark或其他定制工具。

elasticsearch在netflix的應用過去兩年經曆了爆炸式的發展,現在共有約150個叢集和約3500個節點,總資料量約1.3pb,而這其中大部分資料都是通過我們的資料管道采集處理的。

資料路由的部分是由我所在的小組管理的,下面是一些我們碰到過的問題:

kafka high level consumer會喪失消息分區的所有權并停止讀取一些分區,唯一的解決辦法是重新開機。

有時部署代碼之後high level consumer在rebalance時會出錯。

我們有幾十個叢集用于事件路由,營運上的開銷正持續增長,是以對于路由job的管理還要想個更好的辦法。

v2.0 keystone資料管道

我們決心對v1.5的資料管道進行調整是基于下面三個方面的考量。

簡化架構。

提升系統可靠性(chukwa不支援備援)。

kafka社群較活躍後勁足。

Netflix資料管道的變化曆程

架構中一共有三部分主要的子產品:

資料收集-有兩種方式。 

直接寫入kafka。

通過http代理寫入kafka。

資料緩存-使用kafka來實作持久化消息隊列。

資料路由-與v1.5中作用相同。

keystone資料管道已經在生産環境中平穩運作了幾個月,不過我們還在進行品質、擴充性、可用性和自動化方面的提升。

原文釋出時間為:2016-03-15

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号