導航
????????在完成將公司日志數(shù)據(jù)從Elasticsearch(下稱ES)轉戰(zhàn)到Clickhouse后,個人認為有必要將過程記錄分享。限于篇幅及便于分類組織,我會以一個系列文章的形式記錄:
- 01 《Elasticsearch vs Clickhouse》
- 02 《Clickhouse的基礎知識掃盲》
- 03 《?Clickhouse多分片多副本集群部署?》
- 04 《??Clickhouse表引擎選擇和表結構設計?》
- 05 《?clickhouse高效數(shù)據(jù)處理工具vector?》
- 06 《?????????clickhouse的數(shù)據(jù)可視化工具clickvisual?》
- 07?《kibana自定義插件跳轉clickvisual》
- 08 《妙用clickvisual api實現(xiàn)用戶自動管理》(敬請期待)
一、CLickhouse 是什么
????????ClickHouse是俄羅斯Yandex公司于2016年開發(fā),是一個用于OLAP的列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。
存儲形式 |
優(yōu)點 |
缺點 |
業(yè)界代表 |
行式 |
|
|
Mysql、sql server等 |
列式 |
|
|
Clickhouse、SAP HANA等 |
二、為什么選擇CLickhouse
- 數(shù)據(jù)壓縮
????????支持多種壓縮算法,在磁盤空間和cpu的消耗之間達到相對平衡
- 順序讀寫
????????通過預排序、定期合并排序,巧妙的轉化為順序讀寫,大大提升吞吐量和查詢效率
- 多核心并行處理
????????ClickHouse會使用服務器上一切可用的資源,從而以最自然的方式并行處理大型查詢
- 支持通用SQL
????????在大多數(shù)情況下遵循ANSI SQL標準?
三、CLickhouse 基礎知識科普
1、架構層面
(1)分片
- 數(shù)據(jù)讀取由分布式表從所有分片獲取數(shù)據(jù),作并行處理后返回客戶端
- 數(shù)據(jù)寫入有2種方式: 1、直接寫入本地表,通過外部負載均衡實現(xiàn)數(shù)據(jù)平均分布 2、通過分布式表寫入,利用sharding_key實現(xiàn)數(shù)據(jù)平均分布, 支持如下分片方式:
分片方式 |
說明 |
random隨機分片 |
寫入數(shù)據(jù)會被隨機分發(fā)到分布式集群中的某個節(jié)點上 |
constant固定分片 |
寫入數(shù)據(jù)會被分發(fā)到固定一個節(jié)點上 |
column?value分片 |
按照某一列的值進行hash分片 |
自定義表達式分片 |
指定任意合法表達式,根據(jù)計算后的值進行hash分片 |
(2)副本
- Clickhouse 使用 zookeeper(請使用3.4.5或以上版本)存儲副本的元信息
- 副本是表級別的,不是服務器級別的。所以服務器里可以同時有復制表和非復制表
- 只有MergeTree 系列里的表可支持副本
- INSERT和ALTER語句會被復制
- 復制方式是多主異步的?
2、表引擎
(1)合并樹家族(MergeTree)
????????合并樹家族(MergeTree)是Clickhouse內(nèi)適用于高負載任務的最通用和功能最強大的表引擎,基于MergeTree還衍生出十多種具備不同特性的表引擎,下文會重點介紹MergeTree。日志平臺選用的是ReplicatedMergeTree,以實現(xiàn)數(shù)據(jù)副本復制
(2)集成的表引擎
????????支持直接從Hive、S3、RabbitMQ、kafka、mysql等14種常見的數(shù)據(jù)源同步數(shù)據(jù)?
(3)特殊的表引擎
- 分布式表:本身不存儲數(shù)據(jù),讀取時可在多個服務器進行分布式查詢,自動并行后返回。寫入時可通過sharding_key將數(shù)據(jù)寫入各個shard
- 物化視圖:功能類似于數(shù)據(jù)庫視圖
3、表結構(MergeTree)
(1)索引
- 一級索引(稀疏索引):將每列數(shù)據(jù)按照 index granularity(默認8192行)進行劃分,查詢時用二分法查找數(shù)據(jù)。因此,應盡量選用區(qū)分度低的字段
- 二級索引(跳數(shù)索引):跳數(shù)索引是指數(shù)據(jù)片段按照粒度(index_granularity)分割成小塊后,將一定數(shù)量(granularity_value)的小塊按照一定規(guī)則組合成一個新的塊,對這個新的塊寫入索引信息?
(2)主鍵
????????主鍵值不是唯一的,且主鍵必須是 order by 字段的前綴字段。主鍵索引采用的是稀疏索引。
(3)排序(必填)
????????MergeTree 中唯一一個必填項,它設定了分區(qū)內(nèi)的數(shù)據(jù)按照哪些字段順序進行有序保存,應根據(jù)字段使用頻率、優(yōu)先級,由高至低組合,在沒有顯式設置主鍵的情況下,order by 字段即主鍵。?
(4)常用壓縮方式
- LZ4:默認的壓縮方式,壓縮/解壓性能極強,但壓縮率一般
- ZSTD[(level)]:壓縮/解壓性能不如LZ4,但壓縮率比LZ4高,常用于字符串類型。默認level為1,支持1-22,數(shù)字越大壓縮率越高,但壓縮/解壓消耗的cpu、io資源就越多,可結合實際情況設置level值,在cpu資源和磁盤空間之間達到相對平衡
(5)分區(qū)
????????分區(qū)是在一個表中通過指定的規(guī)則劃分而成的邏輯數(shù)據(jù)集。分區(qū)的目的主要是降低掃描的范圍,避免全表掃描,優(yōu)化查詢速度,一般按月、日或事件類型來劃分。但要避免過于精細的分區(qū)方案,以免影響整體性能。?
(6)數(shù)據(jù)生命周期
????????支持字段、表級別的TTL。當字段的值過期時,會替換成該字段的默認值,當該字段所有值過期,會自動刪除此字段;當表中的數(shù)據(jù)行過期時,會自動刪除對應行
四、Clickhouse的配套組件
- zookeeper
????????負責存儲表的元數(shù)據(jù),用于副本復制
- chproxy
????????負責Clickhouse節(jié)點的負載均衡,可實現(xiàn)讀寫分離
- clickvisual
????????目前市面上唯一一款支持clickhouse的類kibana的業(yè)務日志查詢平臺,支持日志查詢、聚合、告警
五、CLickhouse部署架構參考
????????下圖為1分片2副本的架構圖:
六、參考文檔
- Clickhouse
??????????https://clickhouse.com/docs/zh??
- Chproxy
??????????https://www.chproxy.org/cn??
- Clickvisual
??????????https://clickvisual.gocn.vip/??文章來源:http://www.zghlxwxcb.cn/news/detail-774173.html
下回預告
????????Clickhouse多分片多副本集群的詳細部署過程,歡迎關注后續(xù)更新的系列文章~文章來源地址http://www.zghlxwxcb.cn/news/detail-774173.html
到了這里,關于「從ES到CK 02」Clickhouse的基礎知識掃盲的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!