論文閱讀——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互動的程式碼,有了這些,基礎架構元件和開發人員都能很好地理解日誌