Clickhouse Engine kafka 将kafka数据同步clickhouse
本篇文章轉自:https://blog.csdn.net/weixin_41461992/article/details/106790507
起因
由于需要做各種數據庫擺渡到kafka的組件研究。
其中clickhouse和kafka間的數據擺渡,根據官方給出的kafka引擎文檔,便有了我這篇實踐記錄。
相應的,該配置也非常簡單。
官方傳送門: kafka engine clickhouse
這邊對數據庫和kafka環境不再累述。
一、開發環境
kafka 2.4
zookeeper 3.4.5
clickhouse 20.4.5.36
centos7
二、 介紹
clickhouse支持kafka的表雙向同步,其中提供的為Kafka引擎。
其大致情況為如下情況:Kafka主題中存在對應的數據格式,Clickhouse創建一個Kafka引擎表(即相當于一個消費者),當主題有消息進入時,獲取該消息,將其進行消費,然后物化視圖同步插入到MergeTree表中。
該引擎還支持反向寫入到Kafka中,即往Kafka引擎表中插入數據,可以同步到Kafka中(同樣可以使用物化視圖將不同引擎需要的表數據同步插入到Kafka引擎表中)。
下面為Kafka Engine的一些配置:
老版本格式為:
新版本格式為:
Kafka SETTINGSkafka_broker_list = 'localhost:9092',kafka_topic_list = 'topic1,topic2',kafka_group_name = 'group1',kafka_format = 'JSONEachRow',kafka_row_delimiter = '\n',kafka_schema = '',kafka_num_consumers = 2必填參數(例如topic、kafka集群、消費者組等):
非必填的參數:
三、實踐
消費的消息會被自動追蹤,因此每個消息在不同的消費組里只會記錄一次。如果希望獲得兩次數據,則使用另一個組名創建副本。
消費組可以靈活配置并且在集群之間同步。例如,如果集群中有10個主題和5個表副本,則每個副本將獲得2個主題。如果副本數量發生變化,主題將自動在副本中重新分配。
其中AS后面的語句是自己根據實際需求進行調整的。
為了提高性能,接受的消息被分組為max_insert_block_size大小的塊。如果未在stream_flush_interval_ms毫秒內形成塊,則不關心塊的完整性,都會將數據刷新到表中。
detach物化視圖
此處的topic需要與之前的kafka_topic_list對應,既然該參數為list,則可以配置多個topic
按照CSV格式,生產數據輸入
2020-06-28 level1 message 2020-06-28 level2 message 2020-06-28 level3 message此時查看表daily,數據已同步
select * from daily |--- day --- level --- message ---| |--- 2020-06-28 --- level1 --- message ---| |--- 2020-06-28 --- level2 --- message ---| |--- 2020-06-28 --- level3 --- message ---|同理,向kafka引擎表中插入數據,也可以在my_topic中可以消費到插入數據。
在該版本,我在kafka生產者客戶端進行for循環2000w數據進行測試,延遲不高,基本在10秒內同步完成,不知道在表字段數量和復雜sql語句時情況如何。還需要進一步進行實際使用
所遇問題
表結構變更
對于數據同步問題,其中一個就是表同步之間的結構對應問題。
由于表創建的時候,已經固定,所以ck的kafka引擎在遇到字段改變的時候,依然需要刪表重建,或者修改物化視圖進行不同的sql操作。
延遲問題
在之前的版本中,社區有人提出該同步延遲太高,特別是數據量大的時候,但是在我實際測試中,大約2000w簡單單表同步延遲可以接受。具體性能需要進一步測試。
format格式
對于自己規定的格式,一定要正確,比如csv就是csv,json就是json格式,不然會報錯。
消費問題
前面說過,kafka引擎其實是一個或者多個消費者進行topic的消費,那必然就涉及到消費問題,如何重新消費,如何在需要修改業務的時候重新連接。重置偏移量。
場景:丟失數據,重新消費
這樣,就開始重新消費啦
clickhouse日志查看為ck目錄下的log文件夾的clickhouse-server.log中。
總結
以上是生活随笔為你收集整理的Clickhouse Engine kafka 将kafka数据同步clickhouse的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作本地 CentOS-7-x86_64
- 下一篇: 5太空一日杨利伟遇到了哪六个意外情况,又