在LinkedIn的 Kafka 生態系統數據庫
Apache Kafka是一個高度可擴展的消息傳遞系統,做爲LinkedIn的中央數據管道起着相當重要的做用。 Kafka 是在2010年在LinkedIn開發的,它目前在1400多家經紀商處理超過1.4萬億條消息。Kafka 強大的耐用性和低延遲使咱們可以使用Kafka爲LinkedIn提供一些新的關鍵任務用例。其中包括用基於Kafka的複製,威尼斯替代Espresso中的 MySQL複製,並支持下一代Databus(正在開發中)。安全
隨着咱們的 Kafka 使用量繼續快速增加,咱們必須解決一些重大問題,以使全部這些成爲可能,因此咱們圍繞 Kafka 開發了一個完整的生態系統。在這篇文章中,我將總結一些咱們的解決方案,這些解決方案對於使用 Kafka 的人來講多是有用的,而且強調幾個即將到來的活動,您能夠從中瞭解更多。架構
Kafka 生態系統在LinkedIn
上圖並未徹底捕捉到LinkedIn上的各類數據管道和拓撲結構,可是能夠說明LinkedIn Kafka部署中的關鍵實體以及它們如何相互影響。併發
核心 Kafka 服務
Kafka 經紀人框架
咱們爲每一個數據中心的不一樣目的運行幾組 Kafka 經紀人。咱們目前在LinkedIn上部署了近1400名經紀人,每週收到超過2 PB的數據。咱們一般運行Apache Kafka主幹,每一個季度都會削減一個新的內部版本。分佈式
Kafka 鏡子製造商oop
鏡像製造商使咱們可以經過從源集羣中消費並生成目標集羣來製做集羣副本。在數據中心和數據中心內都有多個鏡像管道。Todd Palino的文章總結了咱們如何使用這個來促進LinkedIn上的Kafka的多色。性能
模式註冊表測試
咱們已經在LinkedIn的數據管道內將Avro標準化爲通用語言。所以,每一個生產者都編碼Avro數據,在模式註冊中註冊Avro模式,並在每一個序列化消息中嵌入一個模式ID。消費者從模式註冊表服務中獲取與ID相對應的模式,以反序列化Avro消息。雖然咱們的數據中心有多個模式註冊表實例,但這些實例由包含模式的單個(複製)數據庫支持。大數據
Kafka REST代理
Kafka REST是咱們爲非Java客戶端提供的HTTP代理。咱們的大多數Kafka集羣都有一個關聯的REST代理。Kafka REST也是主題行政運做的官方網關。
Nuage
Kafka大部分都是自助服務:用戶定義本身的事件模式並開始製做主題。Kafka代理自動建立具備默認配置和分區計數的主題。最後,任何消費者均可以消費這個話題,使 Kafka 徹底開放。
隨着 Kafka 的使用量不斷增長,出現新的使用案例,上述方法中出現了一些限制。首先,一些主題須要自定義配置,須要對Kafka SRE進行特殊請求。其次,大多數用戶很難發現和檢查他們擁有的主題的元數據(例如,字節率,審計完整性,模式歷史等)。第三,因爲Kafka包含了各類安全功能,某些主題全部者可能但願限制對主題的訪問,並自行管理ACL。
Nuage是LinkedIn在線數據基礎設施資源的自助服務門戶,最近咱們與Nuage團隊合做,在Nuage內增長了對Kafka的支持。這爲用戶提供了一個方便的地方來管理他們的主題和相關的元數據。Nuage將主題CRUD操做委託給Kafka REST,它抽象出Kafka行政事業的細微差異。
圖書館
LiKafka客戶端庫
LiKafka製做人包裝開放源碼製做人,但也進行模式註冊,Avro編碼,審計和支持大消息。審計事件計算在10分鐘窗口中發送給每一個主題的事件數量。一樣,消費者包裝開源消費者,並進行模式查找,Avro解碼和審計。
Kafka 推工做
Kafka推送工做用於將豐富的數據從Hadoop發送到Kafka,供在線服務使用。推送做業在CORP環境中的Hadoop集羣上運行,並將數據生成到CORP數據部署Kafka集羣中。鏡像製造者將這些數據複製到PROD數據部署集羣中。
Gobblin
Gobblin是LinkedIn的新的攝取框架,並貶低了 Camus,這是咱們之前的Kafka to Hadoop橋樑。它基本上是一個大的Hadoop做業,它將Kafka中的全部數據複製到Hadoop中進行離線處理。
監測服務
Kafka 監視器
這是Kafka部署的一套持續運行的驗證測試,咱們利用這些測試來驗證新版本以及監控現有部署。咱們目前正在監控基本但重要的指標,如端到端延遲和數據丟失。咱們預計將來咱們將在測試集羣中使用這個框架來不斷地測試管理操做的正確性(例如分區從新分配),甚至利用諸如Simoorg之類的錯誤注入框架來確保咱們可以知足咱們的可用性SLA即便在各類失敗的狀況下。
Kafka 審計
咱們的審計跟蹤基礎架構中有兩個關鍵組件:
一種 Kafka 審計服務,用於消費和從新計算 Kafka 集羣中的全部數據,併發出相似於追蹤生產者的審計事件。這使咱們可以將Kafka集羣上的計數與生產者計數進行協調,並檢測數據丟失(若是有的話)。
Kafka 審計驗證服務,持續監控數據的完整性,並提供用於查看審計跟蹤的用戶界面。此服務消耗並將審計事件插入審計數據庫,並在數據延遲或丟失時發出警報。咱們使用審計數據庫來調查發生的警報,並精確地指出數據丟失的位置。
Kafka 生態系統
地洞
Burrow是監控Kafka消費者健康的棘手問題的一個優雅的答案,並提供了一個消費者狀態的全面視圖。它提供消費滯後檢查做爲服務,而不須要指定閾值。它以主題分區粒度監視全部消費者的承諾偏移,並根據須要計算這些消費者的狀態。
流處理在LinkedIn
Samza是LinkedIn的流處理平臺,能夠幫助用戶儘快完成流處理工做並投入生產。流處理領域一直嗡嗡做響,有許多開源系統正在作相似的事情。與專一於很是普遍的功能集的其餘流處理系統不一樣,咱們專一於使Samza在LinkedIn規模下可靠,高性能和可操做。如今咱們有不少生產工做量正在運行,咱們能夠把注意力放在拓寬功能集上。這篇較早的博客文章詳細介紹了咱們關於相關性,分析,站點監控,安全等方面的生產用例以及咱們正在開發的一些新功能。
即將舉行的活動
若是您有興趣進一步瞭解咱們的Kafka生態系統,咱們如何部署和排除Kafka故障,以及咱們的新特性 /用例,咱們邀請您參加這些即將到來的會議:
4月26日:Espresso數據庫複製與Kafka @ Kafka峯會:Espresso是LinkedIn的分佈式文檔商店,託管咱們最重要的成員數據。Tom Quiggle將介紹爲何Espresso將從MySQL的內置複製機制切換到Kafka,以及Espresso如何將Kafka做爲複製流 - 這是一個將Kafka的耐久性和可用性保證加入測試的用例! 4月26日:更多的數據中心,更多的問題 @ Kafka峯會:Todd Palino將談論多數據中心和多層 Kafka 集羣的基礎架構,並就如何監控整個生態系統提供實用技巧。 4月26日: 在LinkedIn Kafka 天,2015年 @ Kafka 峯會:霍埃爾·科什將深刻了解一些最困難,最突出的 Kafka 生產問題是LinkedIn創下2015年該談話會在每一個停運及其影響,以及方法到檢測,調查和整治。 5月10日:創建一個自助服務 Kafka 系統 @ 阿帕奇:大數據:霍埃爾·科什將提供一個深刻了解成什麼須要經過共同編織的安全性,配額的RESTful API和Nuage使 Kafka 一個真正的多租戶服務。 5月9日: 背後縮放流處理應用程序的祕密 @ 阿帕奇:大數據:Navina拉梅什將描述阿帕奇Samza對國家管理和容錯方法,並討論瞭如何能夠有效地用於擴展狀態流處理應用程序。 6月28-30日: λ-少在LinkedIn @流處理@規模的Hadoop峯會:Yi·潘和卡蒂克·帕拉梅西瓦姆將突出Samza的主要優點是實時流處理平臺,其在LinkedIn使用的動手概述。