第四次druid meetup 心得

博客同步

心得這個東西不記下來真的很快就沒了,也許琢磨的五點過個十天半個月就只剩下兩條了,記記也是算是尊重自己的思考吧。

1. 索引還是掃描

Druid文檔中宣稱自己是大量參考了Dremel和Powerdrill的架構(gòu),但是其中最重要的一條“掃描而不是索引”這一點在druid的設(shè)計中又是怎么體現(xiàn)的呢?Powerdrill的論文中詳細(xì)介紹了全局和局部的字典編碼,然后維度上提到更多的是partition而不是index,在這一點上我一直不太明白,什么情況下用掃描而不是索引,感覺在druid的設(shè)計上并沒有貫徹下去。

2. Kafka Indexing Service

聽完之后讓我對使用Kafka Indexing Service表示懷疑了,解決了一個問題,但是同時也帶來了一些嚴(yán)重問題:

  1. Segment碎片化:比如一天的日志花了14天才完全到達(dá),這個時候就會生成數(shù)百個shard的小文件,這可并不是什么好事,對效率也不太友好;
  2. 與原有Lambda架構(gòu)相沖突:在使用了Kafka Indexing Service基礎(chǔ)上進(jìn)行T+1修正就比較尷尬了,一是由于數(shù)據(jù)時間到達(dá)時間不定,生成追加shard的時間也不定,需要反復(fù)進(jìn)行Segment合并來達(dá)到較優(yōu)的效果;二是做修正的數(shù)據(jù)未必與實時數(shù)據(jù)一致,追加Segment的合理性存疑。
  3. 對Kafka的版本有要求,而我米沒有動力將Kafka升到0.9以上,這個就是硬傷了。

3. 留存計算

Druid利用Data Sketch能夠進(jìn)行近似留存計算,但是效率比較低,耗時也比較長。一般來說一個30天的留存倒三角需要30 * 29 / 2 = 435次sketch intersection操作,如果還涉及到時間粒度從小到大的sketch union操作,這個代價可不小。分享的同學(xué)中有一位是大量采用了MySQL做Cache,感覺也行,在提供基于druid的一整套方案的時候,這個也是必不可少的。

4. 通用統(tǒng)計框架

在內(nèi)部的數(shù)據(jù)工場中,大量的Hive任務(wù)都是在做group by a, group by a, b, group by a, b, c,如果能夠把這部分任務(wù)給省掉了,想必也是功德無量——讓專業(yè)的人做專業(yè)的事,讓那些做著低級數(shù)據(jù)統(tǒng)計的人從中解脫出來。我們能夠有可能做到的最大的優(yōu)勢就是數(shù)據(jù)工場——各種表定義、字段定義、字段的類型這樣通通都是知道的。這樣一個統(tǒng)計平臺可能是這樣的:

  1. 需要用戶對數(shù)據(jù)進(jìn)行一些ETL來保證數(shù)據(jù)是“”的,JsonPath能夠解決的抽取問題不需要做ETL;
  2. 用戶能夠定義維度和指標(biāo);
  3. 指標(biāo)之前能夠進(jìn)行運(yùn)算,比如平均瀏覽時長;
  4. 提供非精準(zhǔn)的UV計數(shù),精準(zhǔn)UV計數(shù)仍然可以提供:需要用Hive對數(shù)據(jù)進(jìn)行聚合的預(yù)處理,借助Sketch Hive UDF可以同時生成Sketch和Distinct Count,但是Distinct Count不再具有可聚合性,可用的查詢粒度將會被固定下來(一般來說是天);
  5. 基于4可以提供留存、回訪類信息,比如:昨天注冊的用戶今天購買過XX的用戶有多少;
  6. 查詢條件、留存的條件多種多樣,千變?nèi)f化,需要有良好的查詢條件設(shè)計。

5. Benchmark

Druid官方提供了Benchmark的方式和參考數(shù)值,有必要在集群完成搭建后進(jìn)行相應(yīng)的測試,這樣能夠?qū)盒阅苡幸粋€較好的評估,也便于及時發(fā)現(xiàn)問題。

6. 回饋社區(qū)

有一些改動最好還是跟社區(qū)交流一下,交流交流才能知道解決方案是不是太LOW。等社區(qū)打上patch固然是很慢,但是可以自己在確認(rèn)patch沒有問題的情況下可以先打到自己的版本上,等社區(qū)版本發(fā)布之后再切過去不遲。個人的力量太渺小,適當(dāng)溝通事半功倍,維護(hù)性也更強(qiáng)。

7. SSD

從頭條的實踐來看,SSD還是比較有效的,畢竟沒法指望數(shù)據(jù)能夠完全加載到內(nèi)存中。之前一直忽略了這一部分,看來這部分需要在做完benchmark的基礎(chǔ)上進(jìn)行改進(jìn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容