基於ClickHouse的使用者行為大資料架構

基於ClickHouse的使用者行為大資料架構

SDK埋點採集行為資料來源終端包括iOS、安卓、Web、H5、微信小程式等。不同終端SDK採用對應平臺和主流語言的SDK,埋點採集到的資料透過JSON資料以HTTP POST方式提交到服務端API。

服務端API由資料接入系統組成,採用Nginx來接收透過 API 傳送的資料,並且將之寫到日誌檔案上。使用Nginx實現高可靠性與高可擴充套件性。

對於Nginx列印到檔案的日誌,會由Flume的 Source 模組來實時讀取Nginx日誌,並由Channel模組進行資料處理,最終透過Sink模組將處理結果釋出到 Kafka中。

Kafka是一個廣泛使用的高可用的分散式訊息佇列,作為資料接入與資料處理兩個流程之間的緩衝,同時也作為近期資料的一個備份。

在Flume處理時,根據版本號識別到是測試資料,會寫入kafka的測試分支,此分支會將行為日誌的JSON資料寫入MySQL,為開發人員提供埋點開發除錯過程中的確認。對線上業務沒有影響。

在Flume識別到生產資料,會寫入kafka的生產分支。後端由Flink將Kafka中資料進行必要的ETL與實時維度join操作,形成規範的明細資料,並寫回Kafka以便下游與其他業務使用。再透過Flink將明細資料分別寫入ClickHouse和Hive打成大寬表,前者作為查詢與分析的核心,後者作為備份和資料質量保證。