基于 Flink + ClickHouse 打造輕量級點(diǎn)擊流實(shí)時數(shù)倉
點(diǎn)擊流及其維度建模

點(diǎn)擊流數(shù)倉分層設(shè)計

DIM 層:維度層,MySQL 鏡像庫,存儲所有維度數(shù)據(jù)。 ODS 層:貼源層,原始數(shù)據(jù)由 Flume 直接進(jìn)入 Kafka 的對應(yīng) topic。 DWD 層:明細(xì)層,通過 Flink 將 Kafka 中數(shù)據(jù)進(jìn)行必要的 ETL 與實(shí)時維度 join 操作,形成規(guī)范的明細(xì)數(shù)據(jù),并寫回 Kafka 以便下游與其他業(yè)務(wù)使用。再通過 Flink 將明細(xì)數(shù)據(jù)分別寫入 ClickHouse 和 Hive 打成大寬表,前者作為查詢與分析的核心,后者作為備份和數(shù)據(jù)質(zhì)量保證(對數(shù)、補(bǔ)數(shù)等)。 DWS 層:服務(wù)層,部分指標(biāo)通過 Flink 實(shí)時匯總至 Redis,供大屏類業(yè)務(wù)使用。更多的指標(biāo)則通過 ClickHouse 物化視圖等機(jī)制周期性匯總,形成報表與頁面熱力圖。特別地,部分明細(xì)數(shù)據(jù)也在此層開放,方便高級 BI 人員進(jìn)行漏斗、留存、用戶路徑等靈活的 ad-hoc 查詢,這些也是 ClickHouse 遠(yuǎn)超過其他 OLAP 引擎的強(qiáng)大之處。
要點(diǎn)與注意事項(xiàng)
Flink 實(shí)時維度關(guān)聯(lián)
使用異步 MySQL 客戶端,如 Vert.x MySQL Client。 AsyncFunction 內(nèi)添加內(nèi)存緩存(如 Guava Cache、Caffeine 等),并設(shè)定合理的緩存驅(qū)逐機(jī)制,避免頻繁請求 MySQL 庫。 實(shí)時維度關(guān)聯(lián)僅適用于緩慢變化維度,如地理位置信息、商品及分類信息等。快速變化維度(如用戶信息)則不太適合打進(jìn)寬表,我們采用 MySQL 表引擎將快變維度表直接映射到 ClickHouse 中,而 ClickHouse 支持異構(gòu)查詢,也能夠支撐規(guī)模較小的維表 join 場景。未來則考慮使用 MaterializedMySQL 引擎(當(dāng)前仍未正式發(fā)布)將部分維度表通過 binlog 鏡像到 ClickHouse。
Flink-ClickHouse Sink 設(shè)計
寫入本地表,而非分布式表,老生常談了。 按數(shù)據(jù)批次大小以及批次間隔兩個條件控制寫入頻率,在 part merge 壓力和數(shù)據(jù)實(shí)時性兩方面取得平衡。目前我們采用 10000 條的批次大小與 15 秒的間隔,只要滿足其一則觸發(fā)寫入。 BalancedClickhouseDataSource 通過隨機(jī)路由保證了各 ClickHouse 實(shí)例的負(fù)載均衡,但是只是通過周期性 ping 來探活,并屏蔽掉當(dāng)前不能訪問的實(shí)例,而沒有故障轉(zhuǎn)移——亦即一旦試圖寫入已經(jīng)失敗的節(jié)點(diǎn),就會丟失數(shù)據(jù)。為此我們設(shè)計了重試機(jī)制,重試次數(shù)和間隔均可配置,如果當(dāng)重試機(jī)會耗盡后仍然無法成功寫入,就將該批次數(shù)據(jù)轉(zhuǎn)存至配置好的路徑下,并報警要求及時檢查與回填。
ClickHouse 數(shù)據(jù)重平衡
The End
作者:LittleMagic
原文:jianshu.com/p/bedead165403
推薦閱讀:
世界的真實(shí)格局分析,地球人類社會底層運(yùn)行原理
企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案
華為內(nèi)網(wǎng)最火的文章:什么是內(nèi)卷?
不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)
【中臺實(shí)踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf
阿里達(dá)摩院《機(jī)器學(xué)習(xí)算法學(xué)習(xí)指南》火了,限時開放下載!
評論
圖片
表情
