ClickHouse高性能實時分析數據庫-消費實時數據流(消費kafka)

告別等待,秒級響應!這不只是教程,這是你駕馭PB級數據的超能力!我的ClickHouse視頻課,凝練十年實戰精華,從入門到精通,從單機到集群。點開它,讓數據處理速度快到飛起,讓你的職業生涯從此開掛!

全套視頻教程聯系博主

1 寫在前面

ClickHouse 的 Kafka 引擎本質上是一個數據流的適配器(Adapter),而不是一個存儲引擎。

你需要記住的最重要的一點是:Kafka 引擎本身不存儲任何數據。它就像一根管道,直接連接到 Kafka 的 Topic。當你查詢一個 ENGINE = Kafka 的表時,ClickHouse 會實時地從 Kafka Topic 中拉取(Consume)消息,并根據你指定的格式(如 JSON, CSV)進行解析,然后將結果返回給你。

由于它不存儲數據,所以它通常不單獨使用,而是與物化視圖(Materialized View) 結合,形成一個完整、高效的數據攝取流水線(Pipeline)。

核心比喻

  • Kafka Topic:一個源源不斷流淌著“原漿數據”的河流。

  • ClickHouse Kafka 引擎:一根直接插在河里的智能吸管,它只負責吸水,不負責存水。

  • ClickHouse MergeTree 表:一個巨大無比的蓄水池(我們的數據倉庫),水最終要存在這里。

  • 物化視圖:一個永動機水泵,自動把吸管吸上來的水,源源不斷地泵入蓄水池。

圖解:數據從各種源頭生產出來,匯入 Kafka 這條大河。我們的“智能吸管”(Kafka引擎表)從河里實時吸水,然后“永動機水泵”(物化視圖)立刻把水抽走,存入“蓄水池”(MergeTree表),最后數據分析師就可以在蓄水池里愉快地游泳(查詢)了!?

2 實操(上代碼)

光說不練假把式!我們來親手搭建這個系統。假設 Kafka 的 user_actions topic 里有如下JSON數據流: {"user_id": 101, "event": "login", "ts": "2023-10-27 10:00:00"} {"user_id": 102, "event": "purchase", "ts": "2023-10-27 10:00:05"}

第一步:建造蓄水池 (創建 MergeTree 目標表)

我們得先有個地方存數據。這是我們的最終歸宿,必須堅固耐用(性能好)。

-- 這是我們的“蓄水池”,用來存最終的數據
CREATE TABLE account_store (user_id UInt64,name String,city String
) ENGINE = MergeTree()
PARTITION BY city
ORDER BY (user_id);

第二步:安裝智能吸管 (創建 Kafka 引擎表)

現在,把我們的吸管插到 Kafka 河里。

-- 這是我們的“智能吸管”,它本身不存水!
CREATE TABLE account (user_id UInt64,name   String,city String
) ENGINE = Kafka
SETTINGSkafka_broker_list = 'linux01:9092,linux01:9092,linux03:9092',kafka_topic_list = 'zk_data',kafka_group_name = 'g1', -- 非常重要!每個流用獨立組名kafka_format = 'JSON', -- 告訴吸管,水里的是啥味道的(數據格式)kafka_num_consumers = 1;

靈魂拷問如果我現在 SELECT * FROM user_actions_pipe,會發生什么? 答案:你會看到 當前 Kafka Topic 中的數據!就像你用吸管吸了一口河水嘗嘗味道。但你關掉查詢,數據就沒了,因為它不存儲。

第三步:啟動永動機水泵 (創建物化視圖)

-- 這是我們的“永動機水泵”,連接吸管和蓄水池
CREATE MATERIALIZED VIEW user_actions_pump TO account_store AS
SELECT user_id, name, city
FROM account ;

工作原理

  • TO account_store : 告訴水泵,水要泵到哪個池子。

  • AS SELECT ... FROM account : 告訴水泵,要從哪個吸管抽水,以及抽水的方式(可以直接抽,也可以在抽的時候過濾、轉換一下)。

大功告成! 從現在起,任何進入 account Topic 的新消息,都會被這套全自動系統捕捉,并在幾秒鐘內出現在 account_store 表中,隨時可以查詢!

3 性能優化: 如果管道堵了怎么辦

關鍵監控指標:消費延遲 (Lag) Lag 指的是你的消費速度和你上游數據生產速度之間的差距。Lag 持續增大,說明你的“水泵”馬力不足,水快要從河里溢出來了!

-- 查水表!看看我們的消費組狀態
SELECTtable,partition,last_committed_offset, -- 水泵上次匯報說“我抽到這兒了”current_offset,        -- 河流的最新水位(current_offset - last_committed_offset) AS lag, -- 水位差last_error             -- 水泵有沒有發出警報?
FROM system.kafka_consumers
WHERE table = 'user_actions_pipe';

  • 問題:Lag 持續增長

    • 原因:ClickHouse寫入慢(目標表結構復雜、硬件瓶頸)或消費能力不足。

    • 解決

      • 優化 MergeTree 表的 ORDER BY 鍵。

      • 增加 kafka_num_consumers 數量(不能超過Topic分區數)。

      • 給 ClickHouse 服務器加配置!

  • 問題:last_error 顯示錯誤,消費停止

    • 原因:遇到了“毒丸消息” (Poison Pill)!比如你的數據流里混進了一個非JSON格式的字符串,解析器直接卡住。

    • 解決:給 Kafka 引擎表加上“金剛不壞之身”。

壞(臟)數據怎么辦?設置一下就可以了--針對格式不正確的數據

-- 加上這個設置,遇到10個連續的壞數據就跳過,不影響大部隊
ALTER TABLE user_actions_pipe MODIFY SETTING kafka_skip_broken_messages = 10;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90656.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電子電氣架構 --- 車載軟件與樣件產品交付的方法

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

C++:STL中vector的使用和模擬實現

在上一篇中講到了string類,string并不屬于STL中因為string出現的比STL早,但是在使用方法上兩者有相似之處,學習完string后再來看vector會容易的多,接著往下閱讀,一定會有收獲滴! 目錄 vector的介紹 vect…

倉庫管理的流程、績效和解決方案?

什么是倉庫管理? 倉庫管理涉及對所有倉庫運營的日常監督。一個全面、集成的倉庫管理解決方案采用行業最佳實踐,并涵蓋使高效運營得以實現的所有基本要素。這些要素包括分銷和庫存管理、倉庫勞動力管理以及業務支持服務。此外,由內部提供或與服…

TIM 實現定時中斷【STM32L4】【實操】

使用定時器實現定時中斷的功能:比如每1ms進入中斷處理函數使用STM32CubeMX配置TIM初始化先了解每個參數的含義,在進行配置Counter Settings: 計數器基本設置Prescaler(PSC): 預分頻器,設置預分頻器系數Counter Mode: 技術模式,…

Elasticsearch 的聚合(Aggregations)操作詳解

目錄 1. 概述 2. 聚合類型分類詳解 2.1 桶聚合(Bucket Aggregations) 2.1.1 基礎桶聚合 2.1.2 特殊桶聚合 2.1.3 高級桶聚合 2.2 指標聚合(Metric Aggregations) 2.2.1 單值指標聚合(Single-value Metrics&am…

電子電氣架構 --- 高階智能駕駛對E/E架構的新要求

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

0.深度學習環境配置步驟

0.深度學習環境配置步驟 這里介紹深度學習環境配置詳細步驟,包括安裝軟件,每一步都有安裝時的截圖(后續持續更新,敬請關注) 目錄如下: 1.安裝anaconda 2.安裝CUDA 3.安裝CU_DNN 4.安裝pytorch

在 Azure 中配置 SMS 與 OTP

1. Azure Active Directory B2C (AAD B2C) 中的 SMS/OTP 身份驗證 1.1. 現狀與原理:電話注冊與登錄 Azure Active Directory B2C (AAD B2C) 提供了將電話號碼作為用戶身份標識進行注冊和登錄的功能,旨在為用戶提供一種便捷的替代傳統電子郵件或用戶名登錄…

簡單實現支付密碼的頁面及輸入效果

干我們這行,風吹日曬不到,就怕甲方突發奇想。 今天客戶要做一個安全密碼前置校驗,還要做成支付寶那種效果。ps:android端 心理吐槽了一萬遍以后,還是得面對現實。 先用通義問一遍,給了兩個方案,要么自己寫&…

proxmox 解決docker容器MongoDB創建報錯MongoDB 5.0+ requires a CPU with AVX support

目錄 最簡單直接的方式 測試MongoDB docker compose的安裝shell腳本 驗證訪問 最簡單直接的方式 讓虛擬機直接使用宿主機的物理 CPU 功能標志。 打開 Proxmox Web UI。 選擇你的 VM → 硬件 (Hardware) → CPU → 點擊 編輯 (Edit)。 將 CPU 類型改為 host。 確認并重啟…

向前滾動累加SQL 實現思路

一、業務背景在經營分析場景里,我們經常需要回答:“截至今天,過去 N 天/月/周累計發生了多少?”“把維度切到省、市、房型、項目經理、代理商等,結果又是什么?”本文用兩個真實需求做演示:以天為…

Spring AI(14)——文本分塊優化

RAG時,檢索效果的優劣,和文本的分塊的情況有很大關系。SpringAI中通過TokenTextSplitter對文本分塊。本文對SpringAI提供的TokenTextSplitter源碼進行了分析,并給出一些自己的想法,歡迎大家互相探討。查看了TokenTextSplitter的源…

Python----大模型(RAG 的智能評估-LangSmith)

一、LangSmith LangSmith是LangChain的一個子產品,是一個大模型應用開發平臺。它提供了從原 型到生產的全流程工具和服務,幫助開發者構建、測試、評估和監控基于LangChain 或其他 LLM 框架的應用程序。 安裝 LangSmith pip install langsmith0.1.137 官網…

磁懸浮軸承轉子不平衡質量控制策略設計:原理、分析與智能實現

磁懸浮軸承(Active Magnetic Bearing, AMB)以其無接觸、無摩擦、高轉速、無需潤滑等革命性優勢,在高端旋轉機械領域(如高速電機、離心壓縮機、飛輪儲能、航空航天動力系統)展現出巨大潛力。然而,轉子固有的質量不平衡是AMB系統面臨的核心挑戰之一,它誘發強同步振動,威脅…

C++查詢mysql數據

文章目錄 文章目錄 1.前言 2. 代碼 (1)執行查詢SQL (2)獲取結果集 (3)遍歷結果集(獲取字段數、行數) (4)釋放資源 3.完整代碼 1.前言 我們成功連接數…

【論文閱讀】-《GenAttack: Practical Black-box Attacks with Gradient-Free Optimization》

GenAttack:利用無梯度優化的實用黑盒攻擊 Moustafa Alzantot UCLA Los Angeles, U.S.A malzantotucla.edu Yash Sharma Cooper Union New York, U.S.A sharma2cooper.edu Supriyo Chakraborty IBM Research New York, U.S.A supriyous.ibm.com Huan Zhang UCLA Los…

CT、IT、ICT 和 DICT區別

這四個術語:CT、IT、ICT 和 DICT,是信息通信行業中常見的核心概念,它們既有演進關系,又有各自的技術重點。🔹 一、CT(Communication Technology)通信技術**定義:**以語音通信為核心的…

Effective C++ 條款4:確定對象被使用前已先被初始化

Effective C 條款4:確定對象被使用前已先被初始化核心思想:永遠在使用對象前將其初始化。未初始化對象是未定義行為的常見來源,尤其對于內置類型。 1. 內置類型手動初始化 int x 0; // 手動初始化 const char* text &quo…

LangSmith的配置介紹

文章目錄注冊及登錄生成API KeyLangSmith的配置方式一:放運行環境里方式二:寫代碼里執行代碼查看LangSmith上是否看到本次運行的項目記錄LangSmith的其他注意注冊及登錄 首先使用郵箱注冊一個賬號及設置密碼,等收到收到郵件后,進…

Linux的生態與軟件安裝

堅持用 清晰易懂的圖解 代碼語言,讓每個知識點變得簡單! 🚀呆頭個人主頁詳情 🌱 呆頭個人Gitee代碼倉庫 📌 呆頭詳細專欄系列 座右銘: “不患無位,患所以立。” Linux的生態與軟件安裝前言目錄…