最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年12月01日 10:03:42   作者:大數(shù)據(jù)技術(shù)派  
這篇文章主要為大家介紹了Flink同步Kafka數(shù)據(jù)到ClickHouse分布式表實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

業(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場(chǎng)景(對(duì)于大多數(shù)查詢而言,處理速度至少提高了100倍),下面詳細(xì)解釋了原因(通過圖片更有利于直觀理解),圖片來源于ClickHouse中文官方文檔。

行式

列式

我們使用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。

  • 首先創(chuàng)建一個(gè)分布式數(shù)據(jù)庫
create database test on cluster default_cluster;
  • 創(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è)分片去重,再匯總一下即可。

  • 創(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é)可以都去嘗試一下。

這里貼一下我的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)鍵代碼吧。

連接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.

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

github.com/ClickHouse/…

以上就是詳解Flink同步Kafka數(shù)據(jù)到ClickHouse分布式表的詳細(xì)內(nèi)容,更多關(guān)于Flink數(shù)據(jù)同步Kafka ClickHouse的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • sql Union和Union All的使用方法

    sql Union和Union All的使用方法

    UNION指令的目的是將兩個(gè)SQL語句的結(jié)果合并起來。從這個(gè)角度來看, 我們會(huì)產(chǎn)生這樣的感覺,UNION跟JOIN似乎有些許類似,因?yàn)檫@兩個(gè)指令都可以由多個(gè)表格中擷取資料。
    2009-07-07
  • 淺談一下數(shù)據(jù)庫系統(tǒng)的發(fā)展與組成

    淺談一下數(shù)據(jù)庫系統(tǒng)的發(fā)展與組成

    這篇文章主要介紹了淺談一下數(shù)據(jù)庫系統(tǒng)的發(fā)展與組成,數(shù)據(jù)庫系統(tǒng),指在計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)庫后的系統(tǒng),一般由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫管理員(DBA)構(gòu)成,本文就數(shù)據(jù)庫的發(fā)展展開詳細(xì)講解
    2023-07-07
  • 14張圖看懂什么是區(qū)塊鏈技術(shù)

    14張圖看懂什么是區(qū)塊鏈技術(shù)

    這篇文章主要為大家分享了14張圖,幫助大家看懂什么是區(qū)塊鏈技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • navicat導(dǎo)入excel文件的步驟以及可能碰到的問題

    navicat導(dǎo)入excel文件的步驟以及可能碰到的問題

    本文介紹將excel導(dǎo)入到mysql數(shù)據(jù)庫的方法,相對(duì)來說比較簡(jiǎn)單,但也可能會(huì)碰到一些小問題,在這里做一個(gè)小的總結(jié),這里使用到的工具包括navicat,mysql數(shù)據(jù)庫以及excel,需要的朋友可以參考下
    2024-07-07
  • Dbeaver連接ClickHouse全過程

    Dbeaver連接ClickHouse全過程

    文章主要介紹了如何使用Dbeaver連接ClickHouse數(shù)據(jù)庫,首先需要安裝Dbeaver工具,然后通過新建驅(qū)動(dòng)管理器和設(shè)置庫信息來配置驅(qū)動(dòng),接著,創(chuàng)建數(shù)據(jù)庫連接并填寫連接配置信息,測(cè)試連接以確保配置正確,最后,成功連接ClickHouse數(shù)據(jù)庫
    2024-11-11
  • 存儲(chǔ)過程返回?cái)?shù)組對(duì)象示例代碼

    存儲(chǔ)過程返回?cái)?shù)組對(duì)象示例代碼

    存儲(chǔ)過程返回?cái)?shù)組對(duì)象其實(shí)就相當(dāng)于返回List里面放的對(duì)象數(shù)據(jù),下面與大家分享是例子,感興趣的朋友可以學(xué)習(xí)下
    2013-07-07
  • access mysql mssql 隨機(jī) 10條數(shù)據(jù)的sql語句

    access mysql mssql 隨機(jī) 10條數(shù)據(jù)的sql語句

    好多情況下,大家需要隨機(jī)抽取幾個(gè)數(shù)據(jù),當(dāng)然數(shù)據(jù)是從數(shù)據(jù)庫來的,所以腳本之家特為大家準(zhǔn)備了一些。
    2009-05-05
  • Nebula?Graph解決風(fēng)控業(yè)務(wù)實(shí)踐

    Nebula?Graph解決風(fēng)控業(yè)務(wù)實(shí)踐

    本文主要講述?Nebula?Graph?是如何通過眾安保險(xiǎn)的選型,以及?Nebula?Graph?又是如何落地到具體業(yè)務(wù)場(chǎng)景幫助眾安保險(xiǎn)解決風(fēng)控問題,有需要的朋友可以借鑒參考下
    2022-03-03
  • SQL注入篇學(xué)習(xí)之盲注/寬字節(jié)注入

    SQL注入篇學(xué)習(xí)之盲注/寬字節(jié)注入

    盲注是注入的一種,指的是在不知道數(shù)據(jù)庫返回值的情況下對(duì)數(shù)據(jù)中的內(nèi)容進(jìn)行猜測(cè),實(shí)施SQL注入,下面這篇文章主要給大家介紹了關(guān)于SQL注入篇之盲注/寬字節(jié)注入的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 梧桐數(shù)據(jù)庫與`mysql`及`oracle`關(guān)于交換服務(wù)器編號(hào)的`SQL`寫法分析(推薦)

    梧桐數(shù)據(jù)庫與`mysql`及`oracle`關(guān)于交換服務(wù)器編號(hào)的`SQL`寫法分析(推薦)

    本文介紹了如何通過SQL查詢實(shí)現(xiàn)服務(wù)器編號(hào)的交換操作,以優(yōu)化數(shù)據(jù)中心內(nèi)部服務(wù)器的布局,文章說明了不同數(shù)據(jù)庫(如梧桐數(shù)據(jù)庫、MySQL和Oracle)的建表語句、數(shù)據(jù)插入以及SQL實(shí)現(xiàn)思路,通過具體的SQL查詢,文章展示了如何在不同數(shù)據(jù)庫中交換服務(wù)器編號(hào),并解釋了每個(gè)部分的功能
    2024-11-11

最新評(píng)論

包头市| 钟山县| 抚州市| 泗阳县| 台中县| 自治县| 昌邑市| 毕节市| 乐东| 塔河县| 炉霍县| 嵩明县| 贵南县| 时尚| 平泉县| 白山市| 承德县| 乌海市| 屏边| 且末县| 株洲县| 玉树县| 喜德县| 新巴尔虎左旗| 镇安县| 眉山市| 綦江县| 新津县| 武义县| 宝应县| 进贤县| 伽师县| 德州市| 中卫市| 南丰县| 乌苏市| 修武县| 进贤县| 林芝县| 翁牛特旗| 乌兰浩特市|