Flink同步Kafka數(shù)據(jù)到ClickHouse分布式表

gitee地址:https://gitee.com/ddxygq/bigdata-technical-pai

業(yè)務(wù)需要一種OLAP引擎前塔,可以做到實(shí)時(shí)寫入存儲(chǔ)和查詢計(jì)算功能摹蘑,提供高效剑勾、穩(wěn)健的實(shí)時(shí)數(shù)據(jù)服務(wù),最終決定ClickHouse笙蒙。

什么是ClickHouse沉填?

ClickHouse是一個(gè)用于聯(lián)機(jī)分析(OLAP)的列式數(shù)據(jù)庫管理系統(tǒng)(DBMS)。

列式數(shù)據(jù)庫更適合于OLAP場景(對(duì)于大多數(shù)查詢而言,處理速度至少提高了100倍)掏膏,下面詳細(xì)解釋了原因(通過圖片更有利于直觀理解),圖片來源于ClickHouse中文官方文檔敦锌。

行式

image

列式

image

我們使用Flink編寫程序馒疹,消費(fèi)kafka里面的主題數(shù)據(jù),清洗乙墙、歸一颖变,寫入到clickhouse里面去。

這里的關(guān)鍵點(diǎn)听想,由于第一次使用腥刹,無法分清應(yīng)該建立什么格式的clickhouse表,出現(xiàn)了一些問題汉买,最大的問題就是程序?qū)?shù)據(jù)寫入了衔峰,查詢發(fā)現(xiàn)數(shù)據(jù)不完整,只有一部分蛙粘。我也在網(wǎng)上查了一些原因垫卤,總結(jié)下來。

為什么有時(shí)看不到已經(jīng)創(chuàng)建好的表并且查詢結(jié)果一直抖動(dòng)時(shí)多時(shí)少出牧?

  • 常見原因1:

建表流程存在問題穴肘。ClickHouse的分布式集群搭建并沒有原生的分布式DDL語義。如果您在自建ClickHouse集群時(shí)使用create table創(chuàng)建表舔痕,查詢雖然返回了成功评抚,但實(shí)際這個(gè)表只在當(dāng)前連接的Server上創(chuàng)建了。下次連接重置換一個(gè)Server伯复,您就看不到這個(gè)表了慨代。

解決方案:
建表時(shí),請(qǐng)使用create table <table_name> on cluster default語句啸如,on cluster default聲明會(huì)把這條語句廣播給default集群的所有節(jié)點(diǎn)進(jìn)行執(zhí)行鱼响。示例代碼如下。
Create table test on cluster default (a UInt64) Engine = MergeTree() order by tuple();
在test表上再創(chuàng)建一個(gè)分布式表引擎组底,建表語句如下。
Create table test_dis on cluster default as test Engine = Distributed(default, default, test, cityHash64(a));

  • 常見原因2:

ReplicatedMergeTree存儲(chǔ)表配置有問題筐骇。ReplicatedMergeTree表引擎是對(duì)應(yīng)MergeTree表引擎的主備同步增強(qiáng)版债鸡,在單副本實(shí)例上限定只能創(chuàng)建MergeTree表引擎,在雙副本實(shí)例上只能創(chuàng)建ReplicatedMergeTree表引擎铛纬。

解決方案:
在雙副本實(shí)例上建表時(shí)厌均,請(qǐng)使用ReplicatedMergeTree(‘/clickhouse/tables/{database}/{table}/{shard}’, ‘{replica}’)或ReplicatedMergeTree()配置ReplicatedMergeTree表引擎。其中告唆,ReplicatedMergeTree(‘/clickhouse/tables/{database}/{table}/{shard}’, ‘{replica}’)為固定配置棺弊,無需修改晶密。

這里引出了復(fù)制表的概念,這里介紹一下模她,只有 MergeTree 系列里的表可支持副本:

  • ReplicatedMergeTree
  • ReplicatedSummingMergeTree
  • ReplicatedReplacingMergeTree
  • ReplicatedAggregatingMergeTree
    ReplicatedCollapsingMergeTree
  • ReplicatedVersionedCollapsingMergeTree
  • ReplicatedGraphiteMergeTree

副本是表級(jí)別的稻艰,不是整個(gè)服務(wù)器級(jí)的。所以侈净,服務(wù)器里可以同時(shí)有復(fù)制表和非復(fù)制表尊勿。副本不依賴分片。每個(gè)分片有它自己的獨(dú)立副本畜侦。

創(chuàng)建復(fù)制表

先做好準(zhǔn)備工作元扔,該建表的建表,然后編寫程序旋膳。在表引擎名稱上加上 Replicated 前綴澎语。例如:ReplicatedMergeTree。

  1. 首先創(chuàng)建一個(gè)分布式數(shù)據(jù)庫
create database test on cluster default_cluster;
  1. 創(chuàng)建本地表

由于clickhouse是分布式的验懊,創(chuàng)建本地表本來應(yīng)該在每個(gè)節(jié)點(diǎn)上創(chuàng)建的擅羞,但是指定on cluster關(guān)鍵字可以直接完成,建表語句如下:

CREATE TABLE test.test_data_shade on cluster default_cluster
(
    `data` Map(String, String),
    `uid` String,
    `remote_addr` String,
    `time` Datetime64,
    `status` Int32,
    ...其它字段省略
    `dt` String
)
ENGINE = ReplicatedMergeTree()
partition by dt
order by (dt, sipHash64(uid));

這里表引擎為ReplicatedMergeTree鲁森,即有副本的表祟滴,根據(jù)dt按天分區(qū),提升查詢效率歌溉,sipHash64是一個(gè)hash函數(shù)垄懂,根據(jù)uid散列使得相同uid數(shù)據(jù)在同一個(gè)分片上面,如果有去重需求痛垛,速度更快草慧,因?yàn)榭梢杂?jì)算每個(gè)分片去重,再匯總一下即可匙头。

  1. 創(chuàng)建分布式表
CREATE TABLE test.test_data_all on cluster default_cluster as test.test_data_shade ENGINE = Distributed('default_cluster', 'test', 'test_data_shade', sipHash64(uid));

在多副本分布式 ClickHouse 集群中漫谷,通常需要使用 Distributed 表寫入或讀取數(shù)據(jù),Distributed 表引擎自身不存儲(chǔ)任何數(shù)據(jù)蹂析,它能夠作為分布式表的一層透明代理舔示,在集群內(nèi)部自動(dòng)開展數(shù)據(jù)的寫入、分發(fā)电抚、查詢惕稻、路由等工作。

通過jdbc寫入

這個(gè)我是看的官方文檔蝙叛,里面有2種選擇俺祠,感興趣的同學(xué)可以都去嘗試一下。

image

這里貼一下我的Pom依賴

<dependency>
    <groupId>ru.yandex.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.3.1-patch</version>
    <classifier>shaded</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Flink主程序,消費(fèi)kafka蜘渣,做清洗淌铐,然后寫入clickhouse,這都是常規(guī)操作蔫缸,這里貼一下關(guān)鍵代碼吧腿准。

image

連接clickhouse有2種方式,8123端口的http方式捂龄,和基于9000端口的tcp方式释涛。

這里官方推薦的是連接驅(qū)動(dòng)是0.3.2:

<dependency>
    <!-- please stop using ru.yandex.clickhouse as it's been deprecated -->
    <groupId>com.clickhouse</groupId>
    <artifactId>clickhouse-jdbc</artifactId>
    <version>0.3.2-patch11</version>
    <classifier>all</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Note: ru.yandex.clickhouse.ClickHouseDriver has been deprecated and everything under ru.yandex.clickhouse will be removed in 0.3.3.

image

官方推薦升級(jí)到0.3.2,上面表格給出了升級(jí)方法倦沧,文檔地址:

https://github.com/ClickHouse/clickhouse-jdbc/tree/master/clickhouse-jdbc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唇撬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子展融,更是在濱河造成了極大的恐慌窖认,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件告希,死亡現(xiàn)場離奇詭異扑浸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)燕偶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門喝噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人指么,你說我怎么就攤上這事酝惧。” “怎么了伯诬?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵晚唇,是天一觀的道長。 經(jīng)常有香客問我盗似,道長哩陕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任赫舒,我火速辦了婚禮悍及,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘接癌。我一直安慰自己心赶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布扔涧。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枯夜。 梳的紋絲不亂的頭發(fā)上弯汰,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音湖雹,去河邊找鬼咏闪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛摔吏,可吹牛的內(nèi)容都是我干的鸽嫂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼征讲,長吁一口氣:“原來是場噩夢啊……” “哼据某!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诗箍,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤癣籽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滤祖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筷狼,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年匠童,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了埂材。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汤求,死狀恐怖俏险,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情首昔,我是刑警寧澤寡喝,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站勒奇,受9級(jí)特大地震影響预鬓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赊颠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一格二、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竣蹦,春花似錦顶猜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滔吠。三九已至,卻和暖如春挠日,著一層夾襖步出監(jiān)牢的瞬間疮绷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工嚣潜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冬骚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓懂算,卻偏偏與公主長得像只冻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子计技,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容