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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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的生态与软件安装前言目录…