在過去的幾個月里,Yelp一直在不斷地向大家分享著他們的數據管道的情況(文章列表見頁尾)。這是一套基于Python的工具,可以實時地將數據流向需要它們的服務,并隨之加以必要的數據處理。這一系列的文章講述了如何從MySQL中將消息復制出來、如何跟蹤模式的變化及演進、并最終分享了如何把數據接入到Redshift和Salesforce等不同類型的目標存儲。
幸好Yelp非常慷慨,他們不只是分享了自己的設計思路和經驗,更是趕在圣誕節之前向大家獻上了一份大禮,把主要模塊開源出來了!
在讀過了所有這些關于我們的數據管道的文章之后,可能你會覺得我們這些Yelp的人不過是像一個孩子在向大家炫耀他的新玩具一樣,肯定會自己捂得嚴嚴的,不會和大家分享。但是和大多數有了新玩具又不會分享的孩子一樣,我們愿意分享——所以我們最終決定要把我們的數據管道的主體部分開源出來,然后大家就可以開心地迎來新年假期了。
閑話少說,下面這些就是Yelp為大家的假期準備的圣誕禮物:
MySQL Streamer會不斷地查看MySQL的binlog,得到最新的表變更操作。Streamer負責捕獲MySQL數據庫上的單條數據更改操作,并把它封裝成Kafka消息,發布到Kafka的某個Topic中。如果有必要,也會做模式轉換。 Schematizer服務會跟蹤每一條消息所使用的模式信息。在有新模式出現時,Schematizer會處理注冊消息,并為下游的表生成更改計劃。 Data Pipeline clientlib為生產和消費Kafka消息提供了非常易用的接口。有了clientlib,就再也不必關心Kafka的Topic名字、加密或消費者程序的分區情況了。你可以站在表和數據庫的角度去考慮問題,不必關心其它細節。 Data Pipeline Avro utility包提供了讀寫Avro模式的Python接口。它也可以為表的主鍵等模式信息提供枚舉類,這一點Yelp在實踐中發現非常有用。 Yelp Kafka庫擴展了Kafka-python包,并提供了多重處理消費者組等新功能。這個庫可以幫助大家非常高效地與Kafka進行交互。這個庫也讓用戶可以判斷出Yelp內部的Kafka跨區域部署情況。數據管道中不同組成部分的概覽圖。單個服務用方形表示,而共享包用圓角表示。
這些項目每個都有Docker化的服務,你可以很容易地把它們用到你的架構中。我們希望對于每個用Python構建實時流處理程序的開發者來說,它們都能有用。
有了之前的文章介紹,現在又有了開源的代碼,相信有許多數據處理工程師的圣誕假期都會過得無比充實了。
Yelp的系列文章深度講解了他們如何用“確保只有一次”的方式把MySQL數據庫中的改動實時地以流的方式傳輸出去,他們如何自動跟蹤表模式變化、如何處理和轉換流,以及最終如何把這些數據存儲到Redshift或Salesforce之類的數據倉庫中去。