1. 程式人生 > 實用技巧 >論文閱讀——Twitter日誌系統

論文閱讀——Twitter日誌系統

Twitter關於日誌系統的論文有如下2篇,分別是

《The Unified Logging Infrastructure for Data Analytics at Twitter》和《Scaling Big Data Mining Infrastructure: The Twitter Experience》

https://vldb.org/pvldb/vol5/p1771_georgelee_vldb2012.pdf
https://www.kdd.org/exploration_files/V14-02-02-Lin.pdf

相關PPT

https://www.slideshare.net/Hadoop_Summit/scaling-big-data-mining-infrastructure-twitter-experience
https://slideplayer.com/slide/12451118/
https://blog.twitter.com/engineering/en_us/topics/insights/2016/discovery-and-consumption-of-analytics-data-at-twitter.html
https://www.slideshare.net/kevinweil/hadoop-at-twitter-hadoop-summit-2010
https://www.slideshare.net/kevinweil/protocol-buffers-and-hadoop-at-twitter/1-Twitter_Open_Source_Coming_soon

其中《The Unified Logging Infrastructure for Data Analytics at Twitter》這篇Twitter12年的論文中介紹了Twitter的產品日誌基礎架構以及從應用特定日誌到統一的“客戶端事件”日誌格式的演進,其中message都是Thrift message

當時,Twitter的Hadoop叢集規模有幾百臺。

到現在,我們一般稱10臺左右的Hadoop叢集為小型規模叢集,100多臺的叢集為中型規模叢集,上千臺規模的為大型叢集,上萬臺規模的為超大規模叢集,當叢集規模達到上千臺之後,一般就需要做聯邦了。

就國內網際網路公司而言,據資料顯示:

Airbnb的Hadoop叢集規模為1400臺+

airbnb曾洪博 - 《airbnb資料平臺實踐》
https://myslide.cn/slides/3043

位元組跳動的Hadoop叢集規模為多叢集上萬臺

位元組跳動 EB 級 HDFS 實踐
https://www.infoq.cn/article/aLE9ObVYUEmDvRCzCTBr

Twitter在論文那種提到,在大規模日誌的生產者,管理這些資料的基礎架構,分析pipeline的工程師,資料科學家之間缺乏一下互動,意思即機器和人都能正確地理解一份資料,

比如一個欄位內容為"123",基礎架構服務能知道它是string,而不是int;日誌的生產者生產了一份資料,資料分析師能知道日誌中每個欄位的含義等等。這在Airbnb的PPT《Airbnb的核心日誌系統

》中也提到了

https://myslide.cn/slides/635

Twitter使用Facebook開源的Scribe進行日誌採集,同時Twitter在論文中提到,每一種日誌包含了2個string,一個是category,一個是message。其中category有配置中的元資料決定,包含了這個資料是從哪個寫入的。

同時,Twitter使用ZooKeeper對scribe的agent進行管理,方案很常見,就是在zk註冊一個臨時節點,當節點超時和zk通訊超時一段時間後,臨時節點就會消失,即agent失聯

有點類似filebeat的中心化管理(Beats central management),除外Apache Flume也可以使用Zookeeper作為配置中心

https://www.elastic.co/guide/en/beats/filebeat/7.10/configuration-central-management.html

當日志落盤到HDFS上的時候,系統將會根據日誌中的category,自動將其寫到一個對應的HDFS路徑,即/logs/category

在日誌定義中,由於Twitter廣泛使用的是Thrift,所以其也就沿用了Thrift作為其日誌定義語言,除了Twitter,使用Thrift來定義日誌格式的公司還有Airbnb和Xiaomi;而使用Protobuf有百度,位元組跳動

從日誌統計到大資料分析(六)——秦天下
https://zhuanlan.zhihu.com/p/20401637

今日頭條資料平臺架構師王燁 - 今日頭條大資料平臺的演進
https://myslide.cn/slides/3497

在欄位定義上,文章中提到了欄位格式的問題,就是駝峰,下劃線,還有id,uid。。。這些問題還是比較常見的

還有就是日誌格式問題,非結構化,半結構化,即使是json格式的日誌也存在欄位可以動態變化,欄位是否是optional的問題

在《Scaling Big Data Mining Infrastructure: The Twitter Experience》這篇文章中,作者提到了幾點:

1.不要使用mysql來儲存日誌

2.使用HDFS來儲存日誌,每個HDFS目錄下保持,少量的檔案數以及大檔案

3.從需要正則表示式解析的純文字(plain-text)日誌格式到json格式,再到Thrift格式

使用IDL語言定義日誌格式,此外Twitter還開發了Elephant bird來自動生成和Hadoop,Pig互動的程式碼,有了這些,基礎架構元件和開發人員都能很好地理解日誌