Twitter 如何應用 Druid 分析 ZB 級實時數據?

Druid 是一個用於大數據實時查詢和分析的高容錯、高性能開源分佈式系統,旨在快速處理大規模的數據,並能夠實現快速查詢和分析。尤其是當發生代碼部署、機器故障以及其他產品系統遇到宕機等情況時,Druid 仍能夠保持 100% 正常運行。

Apache Druid 社區在今年初發布了 Druid 0.17.0 。這是該項目自 Apache Incubator 畢業以來的第一個版本,因此也是一個重要的里程碑。

Twitter 在一年多之前就開始採用 Druid,並應用到多個場景中。對於 Twitter 的實踐經驗,我們採訪了 Twitter 大數據引擎負責人羅震霄。他將在 QCon 全球軟件開發大會(北京站)2020 分享主題為《 Twitter ZB 級實時數據分析實踐》的演講。

羅震霄,Twitter Sr. Staff Engineer,負責 Twitter 大數據引擎的開發與運營,主要負責項目 Druid、Presto、Spark、Hive。在加入 Twitter 之前,在 Uber、Netflix、Facebook 從事大數據相關的研發與管理工作。是 Presto Foundation committer 和技術委員會委員。他於復旦大學獲得學士學位,並於 University of Wisconsin Madison 獲得碩士學位。

InfoQ:您好,請問 Druid 自開源以來,有哪些重要的演化?

羅震霄:Twitter 用 Druid 已經有一年多了,從 0.15 到 0.17,這幾個版本都比較穩定,主要的變化有:

  • 設計並實現了 Native Ingestion,徹底擺脫了對 MapReduce 的依賴,可以直接 Ingest Parquet,ORC 文件。
  • Data Ingestion 設計了 Indexer Process。
  • SQL 功能持續加強。
  • 方便易用的用戶界面。
  • 更全面的 Security and Privacy Support,例如 LDAP Authentication and Authorization。

InfoQ:一般的企業,哪些場景需要使用 Druid?Twitter 為什麼選擇了 Druid?Twitter 裡有哪些 Druid 的應用舉例?

羅震霄:Druid 的主要特點是性能快,規模大,易用性好。

  • 性能可以達到 1 秒以下,真正實現了大數據的實時性計算;
  • Druid 單群可以擴展至 2000 臺節點以上,很好的滿足了企業對大數據規模的要求;
  • Druid 的用戶界面非常友好,用戶常常可以通過拖拖拽拽進行查詢,方便非技術類人員的應用。

Twitter 業務有很多實時的大數據需求,我們當時對比了市場上現有的開源方案,在穩定性、擴展性、性能和易用性方面 Druid 都有一定優勢,最後選擇 Druid。目前來看公司上下對 Druid 還比較滿意。

Twitter 所有的 user events 都通過內部 Message Queue 導入 Druid,用戶可以實時對 Druid 進行查詢,也可以在 Druid 基礎上設置各類的監控和提醒。實時監控很好的利用了 Druid 性能快和方便查詢的特性。

Twitter 內部用 Druid 很多,有三大類:其一,將用戶行為數據導入 Druid,進行實時用戶行為分析;其二,通過 Druid 為廣告商提供實時的廣告效果分析;其三,利用 Druid 的實時特性,做實時監控和實時報表。


InfoQ:比如現在某個企業已經有了成熟的 Lamda 架構的離線實時系統。而 Druid 也是 Lamda 架構的,那哪些部分是可以相互 Share 的嗎?

羅震霄:Druid 需要自己的存儲,可以將 Message Queue 同時導入離線系統和實時系統(Druid)。

如果對一些數據經過濾後有實時的計算需求,也可以通過 Hadoop Distributed File System 將數據導入 Druid。

一般來說,企業的 Message Queue 可以共享,Hadoop Distributed File System 也可以作為 Druid 的數據源進行共享。

Twitter 現在正在開發 Presto Druid Connector

,通過 Presto 實時查詢 Druid 數據,這樣企業內部的查詢語言,查詢系統也可以共享。

因為 Twitter 數據分析大多數是通過 SQL 進行的。公司上下對 SQL on Druid 的需求很高。

現有的 DruidSQL 功能不太完善,SubQuery、Join 都不支持。如果將 Druid 數據再導入其他存儲系統,不僅費時費力,而且很難保證數據的一致性。基於這些考慮,我們決定開發 Presto Druid Connector,用 Presto 對 Druid 數據提供完整的 SQL 分析,避免了數據重複,節省了存儲空間,而且還可以利用 Presto Connector 的優勢,跨平臺進行 Join 操作,比如,Join Hadoop Data with Druid Data。

現在有一些用戶在使用 Presto Druid Connector,大家還是比較滿意的。下一步,我們會進一步提升性能,pushdown 各類子運算到 Druid。最終的願景是爭取將所有的 SQL 操作統一到 Presto 上來。


InfoQ:如果一個系統每天需要處理 PB 級別的系統,再增加一個 Druid 這樣的存儲系統,是不是很大程度上增加了存儲空間的壓力?原系統和 Druid,最好的融合方式是什麼樣的?

羅震霄:為了性能的提升,Druid 需要自己的存儲。對 Twitter 而言,查詢速度,和系統的易用性,較之存儲空間,更為重要。

Druid 需要做自己的存儲的原因是:

Druid 一個重要的設計目標是實時查詢,也就是查詢延遲一定要在 1 秒以下。

現有硬件的基本性能決定,從內存中順序讀取 4GB 數據的延時在 1 秒左右,實際應用場景中,我們處理的數據遠遠大於 4GB,所以,沒有索引,僅僅靠掃描文件,是不可能達到實時查詢要求的。

基於這些考慮,Druid 設計並實現了自己的存儲格式,主要是列式存儲,並應用字典、RLE 等方式進行優化。Druid 還設計了 bitmap 索引。在實際應用中,bitmap 索引會以 mmap 方式放在內存中。絕大多數查詢可以通過 bitmap 索引直接找到結果,少數查詢會通過列式存儲進行有選擇性的文件查詢。

我們也在開發一些項目,儘量減少不必要的數據重複。比如 Presto Druid Connector,通過 Presto 實時查詢 Druid 數據,這樣當用戶需要對 Druid 數據進行 SQL 分析時,用 Presto 就可以了,不必要拷貝數據。


InfoQ:Druid 和 Kylin 這樣的開源軟件主要差別在哪裡?

羅震霄:對 Kylin 實在不太熟悉,不好妄加評論。

我們當時主要考慮的是 Druid 和 Pinot,這兩個現在應用比較廣泛。相對而言,Druid 更穩定一些,社區也更大一些。


InfoQ:目前還有哪些 OLAP 平臺可供選擇?Druid 相對有何優勢?

羅震霄:現有的 OLAP 平臺比較多,開源方面,有 Hive、 Impala、Spark、Presto、Drill、Druid、Pinot 等等。

Twitter 現在的技術佈局:對實時計算,統一於 Druid,對秒級到幾十分鐘級的數據分析,統一於 Presto,對小時級別的 ETL,統一於 Spark。

Druid 主要的優勢在性能,穩定性,擴展性,和易用性。能夠達到 1 秒以下的實時引擎,只有 Druid 和 Pinot,如果考慮到擴展性和穩定性,Druid 的優勢比較明顯。


InfoQ:在 Twitter 裡,您們定製了關於 Druid 的哪些開發功能?(與開源版本不同的功能)

羅震霄:主要是四個方面:

  • 對 Thrift 文件格式的支持,Twitter 內部有大量的 Thrift 文件。
  • Presto Druid Connector,通過 Presto 對 Druid 數據進行 SQL 分析。
  • Multi-tenancy Druid,Druid 支持不同的用戶類型,包括數據安全,隱私保護,和數據隔離。
  • Native Ingestion,擺脫對 MapReduce 的依賴,直接導入 Parquet 文件。

InfoQ:未來,Twitter 還計劃對 Druid 開發或加強哪些功能?

羅震霄:主要有以下計劃:

  • Unified Indexing Service,為用戶提供方便的一鍵式導入。
  • Secure Druid,完整的 Druid 信息安全,包括 LDAP Authentication and Authorization。
  • Pushdown for Presto Druid Connector,用 Presto 為 Druid 提供完整的 SQL 分析,並充分發揮 Druid 的性能優勢,包括 Predicate Pushdown, Aggregation Pushdown,Limit Pushdown。

在 QCon 北京 2020 的演講中,羅震霄老師將會分享 Twitter 在 ZB 級實時數據分析實踐中遇到的經驗和教訓。還有多位國內外一線互聯網企業的技術專家為大家分享新的實時計算和數據分析技術發展趨勢,大量真實生產實踐案例或許能給你帶來新的啟發

關注我並轉發此篇文章,私信我“領取資料”,即可免費獲得InfoQ價值4999元迷你書!


分享到:


相關文章: