ITPub博客

首页 > 大数据 > 数据分析 > 基于ClickHouse的百亿级广告平台实时数仓构建实战

基于ClickHouse的百亿级广告平台实时数仓构建实战

原创 数据分析 作者:杜思雨 时间:2022-04-08 23:29:24 0 删除 编辑

【 作 者 介 绍 】 王 磊 , 阿 里 云   M V P , 华 院 计 算 技 术 总 监 。 著 有 : 《 图 解   S p a r k   大 数 据 快 速 分 析 实 战 》 ; 《 o f f e r   来 了 : J a v a   面 试 核 心 知 识 点 精 讲 ( 原 理 篇 ) 》 ; 《 o f f e r   来 了 : J a v a   面 试 核 心 知 识 点 精 讲 ( 架 构 篇 ) 》 ; 极 客 时 间 每 日 一 课 专 栏 作 者 。


编 辑   |   韩 楠

约   5 1 0 0   字   |   1 0   分 钟 阅 读



问题背景



我们公司是一个每天百亿增量数据的互联网广告公司,作为大数据专家我主要的职责是负责系统的优化和迭代,在系统优化和迭代中,我和我们的团队一直努力寻求一种既能快速完成数据分析又能节省服务器资源的数据解决方案。

我 们 的 广 告 平 台 的 数 据 , 包 括 实 时 数 据 和 离 线 数 据 。 实 时 数 据 首 先 会 发 送 到 消 息 系 统 , 然 后 在 消 息 系 统 中 进 行 流 转 批 , 最 终 将 转 换 后 的 数 据 存 储 在 S 3 上 , 离 线 数 据 则 直 接 调 用 S 3 的 A P I 将 数 据 存 储 在 S 3 上 。 S 3 上 存 储 的 数 据 格 式 有 : C S V 、 T X T 、 P a r q u e t 、 O R C 等 。

图 1


查 询 的 时 候 通 过 A t h e n a 、 S p a r k 或 者 H a d o o p 进 行 查 询 分 析 。 最 终 分 析 的 数 据 用 于 B I 、 统 计 报 表 和 告 警 规 则 等 。  

这 种 方 案 的 好 处 是 多 源 数 据 入 库 方 便 , 并 且 查 询 的 时 候 , 在 A t h e n a 中 通 过 标 准 S Q L 按 照 不 同 的 需 求 , 可 以 进 行 任 何 维 度 的 数 据 分 析 。

但 是 这 种 方 案 有 一 个 很 大 的 缺 点 就 是 查 询 效 率 慢 , 并 且 多 源 数 据 的 一 致 性 难 以 保 障 。 一 般 对 T B 级 别 数 据 量 的 分 析 耗 时 在 2 0 秒 以 上 , 因 此 它 更 适 合 于 离 线 数 据 分 析 。 这 也 是 大 数 据 行 业 比 较 典 型 的 离 线 数 仓 方 案 。

图 2



梳理分析,解决问题


怎 么 做 既 能 够 将 多 源 数 据 进 行 融 合 , 又 能 实 现 快 速 实 时 的 分 析 数 据 。 同 时 服 务 器 的 预 算 又 能 控 制 在 合 理 的 范 围 内 , 这 个 问 题 , 可 以 说 一 直 是 我 们 架 构 优 化 的 方 向 。

由 于 离 线 数 据 的 缺 点 随 着 数 据 量 的 增 大 越 来 越 被 放 大 , 因 此 我 们 迫 切 需 要 一 个 既 能 快 速 融 合 和 分 析 多 源 数 据 , 同 时 又 经 济 实 惠 的 实 时 数 仓 的 方 案 。 经 过 内 部 讨 论 , 这 个 方 案 需 要 满 足 这 样 的 一 些 条 件 , 梳 理 了 七 点 。


图 3



上 面 7 个 关 键 点 , 第 3 、 4 点 是 目 前 实 时 数 仓 建 立 的 核 心 需 求 , 也 是 难 点 。


值 得 注 意 的 是 :


任 何 解 决 方 案 都 没 有 完 美 的 , 我 们 只 能 在 大 量 的 实 践 摸 索 中 不 断 加 以 完 善 、 丰 富 。 我 们 的 实 时 数 仓 基 于 C l i c k H o u s e 的 p r o j e c t i o n 在 构 建 主 题 上 探 索 出 了 比 较 好 的 方 案 , 但 是 基 于 数 据 变 更 的 自 动 感 知 , 目 前 仍 然 不 是 个 比 较 完 美 的 解 决 方 案 , 后 续 的 实 践 中 还 需 要 进 一 步 完 善 。 行 业 里 该 方 案 其 实 也 处 于 探 索 阶 段 。

 

言 归 正 传 , 刚 刚 经 过 前 面 的 需 求 分 析 , 我 们 十 分 明 确 的 一 点 是 “ 需 要 一 个 实 时 数 仓 平 台 ” 。 但 是 如 何 根 据 我 们 目 前 的 需 求 在 投 入 最 少 的 情 况 下 , 获 得 最 多 的 收 入 呢 ? 为 了 达 到 上 面 的 目 标 , 我 们 对 市 场 上 的 实 时 数 仓 方 案 进 行 了 分 析 , 最 终 确 定 基 于 S t a r t R o c k s 或 者 C l i c k H o u s e 构 建 实 时 数 仓 。 来 一 起 看 看 具 体 的 实 现 方 式 :

 

  1. 将 数 据 源 上 的 实 时 数 据 直 接 写 入 消 费 服 务 。

  2. 对 于 数 据 源 为 离 线 文 件 的 情 况 , 有 两 种 处 理 方 式 , 一 种 是 将 文 件 转 为 流 式 数 据 写 入 K a f k a , 另 外 一 种 情 况 是 直 接 将 文 件 通 过 S Q L 导 入 C l i c k H o u s e 集 群 。

  3. C l i c k H o u s e 接 入 K a f k a 消 息 , 并 将 数 据 写 入 对 应 的 原 始 表 , 基 于 原 始 表 可 以 构 建 物 化 视 图 、 P r o j e c t 等 实 现 数 据 聚 合 和 统 计 分 析 。

  4. 应 用 服 务 基 于 C l i c k H o u s e 数 据 对 外 提 供 B I 、 统 计 报 表 、 告 警 规 则 等 服 务 。

 


图 4



 

解决问题的核心关键点


在 S t a r R o c k s 、 C l i c k H o u s e 这 两 种 方 案 中 , 我 们 经 过 性 能 和 功 能 上 的 比 较 , 最 终 选 择 了 C l i c k H o u s e 。 这 里 可 能 有 人 会 想 了 , 那 为 什 么 选 择 C l i c k H o u s e 呢 ? 主 要 原 因 有 这 几 点 。  

  1. 通 过 具 体 的 测 试 发 现 C l i c k H o u s e 在 5 0 T B 约 1 4 0 亿 数 据 上 , 整 体 的 查 询 稳 定 性 和 性 能 优 于 S t a r R o c k s 。

  2. C l i c k H o u s e 支 持 源 数 据 载 入 , 具 体 包 括 K a f k a 、 S 3 、 H T T P 、 J D B C 等 。

  3. C l i c k H o u s e 支 持 联 邦 查 询 , 可 以 轻 松 将 M y S Q L 或 者 M o n g o D B 的 数 据 和 C l i c k H o u s e 的 数 据 进 行 关 联 查 询 。

  4. 基 于 p r o j e c t 支 持 数 据 的 实 时 统 计 。

  5. 基 于 物 化 视 图 支 持 基 于 原 始 的 统 计 数 据 存 储 。

  6. 支 持 数 据 权 限 。

图 5


 

介 绍 完 了 我 们 选 择 C l i c k H o u s e 的 原 因 , 下 面 进 入 到 本 文 的 重 头 戏 , 如 何 通 过 C l i c k H o u s e 实 现 我 们 最 初 在 构 建 实 时 数 仓 时 提 出 的 要 求 。


( 一 ) 如 何 保 障 各 种 来 源 的 数 据 能 实 时 地 入 仓。

 

一 般 我 们 将 多 源 数 据 分 为 离 线 数 据 、 实 时 数 据 和 其 他 周 边 库 数 据 。 离 线 数 据 主 要 指 文 件 数 据 , 实 时 数 据 主 要 是 K a f k a 消 息 队 列 中 的 数 据 、 周 边 库 数 据 指 的 的 类 似 M y S Q L 、 M o n g o D B 等 数 据 。 接 下 来 从 实 战 角 度 , 分 别 说 下 如 何 接 入 各 种 数 据 源 。

( 1 ) M y S Q L 的 数 据 接 入 , 可 以 通 过 使 用 J D B C 方 式 实 现 。


CREATE TABLE user_table(    `id` Int32,    `user_name` String,    `height` Float32,    `password` Nullable(String))ENGINE JDBC('jdbc:mysql://localhost:3306/?user=root&password=root', 'test', 'test')

c o d e 1


通 过 前 面 代 码 将 M y S Q L 表 接 入 到 C l i c k H o u s e 后 , 就 可 以 直 接 在 C l i c k H o u s e 中 直 接 查 询 M y S Q L 表 中 的 数 据 。

SELECT * FROM user_table

c o d e 2


 

同 样 也 可 以 向 M y S Q L 中 插 入 数 据 。

INSERT INTO user_table(`id`, `user_name`) VALUES(1,'alex')

c o d e 3

 


( 2 ) 下 面 咱 们 看 下 M o n g o D B 的 数 据 接 入 :

CREATE TABLE [IF NOT EXISTS] testdb.test_collection(    id UInt64,    name String,) ENGINE = MongoDB(127.0.0.1:27017, testdb, test_collection, 'your_user_name', 'your_password');

c o d e 4

 

表 建 立 好 后 便 可 以 执 行 查 询 语 句 。

SELECT COUNT() FROM test_collection;

c o d e 5

 

( 3 ) 再 看 下 S 3 的 数 据 接 入 :

CREATE TABLE s3_table (name String, value UInt32)     ENGINE=S3(')    SETTINGS input_format_with_names_use_header = 0;

c o d e 6


 

S 3   表 数 据 建 立 好 后 , 我 们 向 其 中 插 入 数 据 。

INSERT INTO s3_table VALUES ('a', 1), ('b', 2), ('c', 3);

c o d e 7


 

同 样 可 以 像 使 用 关 系 型 数 据 库 一 样 查 询 S 3 数 据 表 。

SELECT * FROM s3_table LIMIT 2;

c o d e 8


 

( 4 )   K a f k a 数 据 接 入 : C l i c k H o u s e 提 供 了 K a f k a 数 据 接 入 引 擎 , 可 以 方 便 地 实 现 将 K a f k a 的 数 据 接 入 到 C l i c k H o u s e 中 , 并 将 其 插 入 到 C l i c k H o u s e 表 中 。

CREATE TABLE kafka_source_test (    level String,    type String,   name String,   time DateTime64  ) ENGINE = Kafka SETTINGS kafka_broker_list = 'localhost:9092',                            kafka_topic_list = 'test_topic',                            kafka_group_name = 'test_group',                            kafka_format = 'JSONEachRow',                            kafka_num_consumers = 4;

c o d e 9


 

这 段 代 码 接 入 了 地 址 为 l o c a l h o s t : 9 0 9 2 , t o p i c 为 t e s t _ t o p i c 的 K a f k a 实 时 数 据 。 其 中 消 费 者 分 组 为 t e s t _ g r o u p , C l i c k H o u s e 会 实 时 将 数 据 消 费 到 C l i c k H o u s e 的 表 k a f k a _ s o u r c e _ t e s t 中 。 当 K a f k a 的 T o p i c 有 数 据 产 生 时 , 数 据 会 实 时 被 消 费 和 处 理 , 并 插 入 k a f k a _ s o u r c e _ t e s t 表 中 。

  SELECT * FROM kafka_source_test LIMIT 5

c o d e 1 0


 

通 过 前 面 的 介 绍 , 你 可 以 看 到 C l i c k H o u s e 接 入 数 据 源 还 是 比 较 简 单 的 , 其 中 K a f k a 是 构 建 实 时 数 仓 最 常 用 的 数 据 源 。


( 二 ) 数 据 入 仓 能 及 时 被 分 析。

 

这 里 的 数 据 分 析 分 为 两 种 情 况 , 一 种 情 况 是 有 明 确 需 求 的 报 表 分 析 , 这 种 情 况 下 可 以 对 实 时 数 据 边 入 库 边 分 析 , 具 体 可 以 通 过 建 立 物 化 视 图 的 方 式 实 现 , 也 可 以 通 过 C l i c k H o u s e 的 p r o j e c t i o n 实 现 。 另 外 一 种 情 况 是 随 机 性 的 数 据 分 析 需 求 , 像 这 种 需 求 C l i c k H o u s e 基 于 索 引 可 以 做 到 T B 级 别 数 据 秒 级 计 算 返 回 。 具 体 的 代 码 实 现 后 面 将 会 介 绍 。


( 三 ) 基 于 实 时 数 仓 能 方 便 的 根 据 业 务 需 求 建 立 主 题 数 据。

 

我 们 构 建 实 时 数 仓 的 很 大 一 个 初 衷 是 : 当 客 户 有 基 于 主 题 的 报 表 需 求 时 , 我 们 通 过 一 个 配 置 或 者 一 条 S Q L 语 句 , 就 能 实 现 业 务 的 统 计 报 表 。 那 么 具 体 在 C l i c k H o u s e 中 如 何 实 现 呢 ?

其 中 物 化 视 图 和 p r o j e c t i o n , 是 C l i c k H o u s e 实 现 灵 活 的 按 照 业 务 构 建 主 题 数 据 的 具 体 解 决 方 案 , 下 面 咱 们 分 别 对 这 两 个 关 键 知 识 点 进 行 介 绍 。

其 他 更 多 C l i c k H o u s e 的 原 理 和 使 用 , 需 要 同 学 们 在 具 体 使 用 中 查 阅 官 方 文 档 ( h t t p s : / / c l i c k h o u s e . c o m / d o c s / e n / ) 。

  1 . 物 化 视 图

虽 然 C l i c k H o u s e 的 性 能 在 T B 级 别 的 数 据 的 查 询 上 , 已 经 能 达 到 秒 级 返 回 了 , 近 乎 完 美 。 但 是 在 超 大 规 模 和 特 别 复 杂 的 计 算 场 景 下 计 算 耗 时 , 还 是 面 对 一 些 挑 战 , 这 时 我 们 就 需 要 通 过 一 个 类 似 触 发 器 的 机 制 , 将 原 始 数 据 进 行 实 时 汇 总 , 这 样 我 们 统 计 分 析 时 直 接 查 询 汇 总 后 的 表 就 可 以 , 如 此 一 来 , 无 论 对 于 服 务 器 负 载 还 是 业 务 快 速 分 析 的 需 求 都 是 友 好 的 。 那 么 如 何 对 C l i c k H o u s e 数 据 进 行 实 时 分 析 汇 总 呢 ? 答 案 就 是 物 化 视 图 。

这 里 得 先 看 下 物 化 视 图 的 原 理 。

物 化 视 图 的 构 建 过 程 中 包 括 一 个 原 表 , 一 个 物 化 视 图 和 一 个 目 标 表 。 物 化 视 图 定 义 了 数 据 物 化 的 计 算 逻 辑 , 当 我 们 向 原 表 插 入 一 条 数 据 时 , 会 触 发 物 化 计 算 , 计 算 完 成 后 将 计 算 结 果 实 时 写 入 目 标 表 。 用 户 查 询 的 时 候 查 询 目 标 表 即 可 完 成 数 据 的 分 析 。

图 6

 


在 实 际 应 用 中 我 们 对 于 报 表 需 求 , 我 们 通 过 物 化 视 图 来 实 现 , 例 如 对 于 k a f k a _ s o u r c e _ t e s t 中 的 数 据 , 我 们 需 要 基 于 t y p e 字 段 按 照 “ 天 ” 进 行 统 计 。

首 先 我 们 需 要 建 立 一 个 物 化 视 图 的 基 础 表 。

CREATE TABLE statistics_type_day(    type String,    day Date,    type_count UInt32)ENGINE = SummingMergeTree()ORDER BY (type, day)

c o d e 1 1

 

 

上 述 建 表 语 句 中 使 用 了 S u m m i n g M e r g e T r e e 引 擎 , 该 引 擎 用 于 统 计 数 据 的 存 储 , 它 能 在 合 并 分 区 的 时 候 , 按 照 预 定 义 条 件 对 数 据 进 行 聚 合 , 将 相 同 分 组 的 多 行 数 据 统 一 到 一 行 , 从 而 显 著 减 少 存 储 空 间 , 加 快 查 询 的 效 率 。

接 下 来 我 们 创 建 一 个 物 化 视 图 , 将 k a f k a _ s o u r c e _ t e s t 表 中 的 数 据 实 时 进 行 统 计 分 析 并 写 入 s t a t i s t i c s _ t y p e _ d a y 表 中 。

CREATE MATERIALIZED VIEW if not exists statistics_type_day_mv TO statistics_type_day AS SELECT type, day, count(1) type_countfrom kafka_source_testgroup by type, day

c o d e 1 2


 

这 样 当 k a f k a _ s o u r c e _ t e s t 中 有 数 据 的 时 候 , 便 能 实 时 统 计 并 将 统 计 结 果 物 化 下 来 。 查 询 的 时 候 直 接 查 询 物 化 表 s t a t i s t i c s _ t y p e _ d a y 就 行 。

select * from statistics_type_day where day='2022-03-20'

c o d e 1 3


 

2 . p r o j e c t i o n : 数 据 投 影

C l i c k H o u s e 的 p r o j e c t i o n 本 质 上 实 现 的 是 数 据 聚 合 , 小 伙 伴 可 能 要 问 了 , 既 然 C l i c k H o u s e 已 经 有 物 化 视 图 了 , 为 何 还 需 要 p r o j e c t i o n 呢 ?

试 想 这 样 一 个 场 景 , 我 们 有 一 个 1 5 0 个 字 段 的 表 , 基 于 该 表 我 们 针 对 不 同 业 务 构 建 了 2 0 个 物 化 视 图 。 那 我 们 业 务 在 分 析 的 时 候 如 果 查 询 基 础 数 据 就 到 基 础 表 查 询 , 如 果 查 询 的 是 统 计 数 据 则 需 要 在 对 应 的 物 化 视 图 的 统 计 表 中 查 询 。

但 是 在 实 际 的 使 用 过 程 中 , 常 常 因 为 构 建 视 图 和 使 用 视 图 的 人 不 在 一 个 团 队 , 一 种 情 况 是 使 用 者 不 知 道 有 哪 些 视 图 可 以 使 用 , 所 以 在 写 S Q L 的 是 时 候 就 直 接 查 基 表 了 , 另 外 一 种 情 况 是 业 务 需 要 针 对 基 础 表 的 S Q L 和 统 计 表 的 S Q L 维 护 多 个 业 务 S Q L , 在 查 询 上 不 统 一 。

  图 7


那 么 如 何 构 建 一 个 表 , 在 该 表 上 既 能 完 成 基 础 数 据 的 查 询 , 也 能 进 行 统 计 数 据 的 查 询 , 如 果 能 实 现 的 话 , 之 前 的 1 + 2 0 个 表 S Q L 的 维 护 就 变 成 了 1 张 表 S Q L 的 维 护 。 使 用 起 来 将 大 大 简 化 应 用 层 开 发 , 应 用 层 也 不 用 关 注 哪 些 是 统 计 数 据 , 哪 些 是 基 础 数 据 。

C l i c k H o u s e 的 p r o j e c t i o n 给 了 这 个 问 题 一 个 很 好 的 解 决 方 案 。

p r o j e c t i o n 在 数 据 分 析 功 能 上 类 似 于 物 化 视 图 , 我 们 可 以 在 p r o j e c t i o n 中 预 定 义 表 达 式 , 当 数 据 写 入 的 时 候 , 会 将 原 始 数 据 和 针 对 p r o j e c t i o n 中 表 达 式 计 算 后 的 聚 合 数 据 一 起 写 入 存 储 。

在 查 询 的 时 候 会 经 过 一 个 智 能 路 由 的 过 程 , 智 能 路 由 通 过 分 析 S Q L 语 句 , 如 果 发 现 S Q L 语 句 查 询 的 数 据 都 在 聚 合 数 据 中 , 则 直 接 查 询 聚 合 数 据 并 将 结 果 返 回 给 用 户 , 这 块 便 大 大 减 少 了 服 务 器 资 源 的 开 销 , 只 有 到 查 询 的 数 据 在 各 个 p r o j e c t i o n 都 不 存 在 的 时 候 才 会 去 查 基 表 进 行 统 计 。 也 可 以 理 解 为 C l i c k H o u s e 基 于 p r o j e c t i o n 自 动 完 成 了 查 询 优 化 。 ( 具 体 参 见 下 图 )

图 8

 

 

了 解 了 p r o j e c t i o n 原 理 后 , 接 下 来 我 们 看 下 如 何 使 用 p r o j e c t i o n , 首 先 需 要 定 义 p r o j e c t i o n 。

CREATE TABLE test_projection_table(    level String,   type String,   name String,   city String,   time DateTime64,    PROJECTION projection_1    (         SELECT             name,             count(1)         GROUP BY  level    ) ,     PROJECTION projection_2    (         SELECT             name,             count(1)         GROUP BY type     ) ) ENGINE = MergeTree() ORDER BY (name , level, type)

c o d e 1 4


上 述 代 码 在 定 义 表 的 时 候 定 义 了 p r o j e c t i o n _ 1 和 p r o j e c t i o n _ 2 , 其 中 p r o j e c t i o n _ 1 在 l e v e l 维 度 对 数 据 进 行 汇 总 , p r o j e c t i o n _ 2 在 t y p e 维 度 对 数 据 进 行 汇 总 。 在 创 建 好 p r o j e c t i o n 后 还 可 以 对 p r o j e c t i o n 进 行 修 改 。

ALTER TABLE test_projection_table     ADD PROJECTION projection_3    (         SELECT             count(1),             name        GROUP BY type, level     )

c o d e 1 5



那 么 查 询 的 时 候 , 如 何 才 能 命 中 p r o j e c t i o n 呢 ? 得 满 足 这 样 几 个 条 件 :

  1. s e l e c t   表 达 式 必 须 为   p r o j e c t i o n   定 义 中   s e l e c t   表 达 式 的 子 集 。

  2. g r o u p   b y   列 必 须 为   p r o j e c t i o n   定 义 中   g r o u p   b y   列 的 子 集 。

  3. w h e r e   条 件   必 须 为   p r o j e c i t o n   定 义 中 的   g r o u p   b y   列   的 子 集 。

例 如 这 里 S Q L 查 询 的 时 候 会 走 表 达 式 :

select name,count() from test_projection_table where type='A' group by type

c o d e 1 6


 

而 S Q L 不 会 走 p r o j e c t i o n , 因 为 c i t y 不 在 p r o j e c t i o n 的 定 义 中 。


select name,city,count() from test_projection_table where type='A' group by city

c o d e 1 7

 


具 体 可 以 通 过 e x p l a i n   查 看 执 行 计 划 , 如 果 出 现 R e a d F r o m S t o r a g e   ( M e r g e T r e e ( w i t h   p r o j e c t i o n ) )   , 表 示 命 中   p r o j e c t i o n 。


( 四 ) 实 时 数 仓 需 要 提 供 元 数 据 变 更 的 自 动 感 知 能 力 。


对 于 元 数 据 的 变 更 C l i c k H o u s e 无 法 做 到 自 动 感 知 , 我 们 构 建 了 一 个 元 数 据 管 理 平 台 , 实 时 监 C l i c k H o u s e   I n s e r t 语 句 , 当 发 现 有 新 的 S c h e m a 变 更 后 以 告 警 的 形 式 通 知 研 发 人 员 , 有 研 发 人 员 修 改 表 结 构 以 兼 容 元 数 据 的 变 更 。


( 五 ) 实 时 数 仓 难 免 需 要 要 外 部 数 据 交 互 , 因 此 实 时 数 仓 需 要 具 备 联 邦 查 询 的 能 力 。


对 于 联 邦 查 询 , 我 们 将 外 部 库 表 数 据 接 入 C l i c k H o u s e 并 和 C l i c k H o u s e 进 行 联 邦 查 询 。


( 六 ) 对 外 提 供 一 个 统 一 的 数 据 分 析 服 务 , 用 户 不 用 关 心 数 仓 底 层 数 据 复 杂 的 关 系 关 系 。

在 查 询 上 我 们 利 用 p r o j e c t i o n 特 性 将 查 询 统 一 到 一 个 表 上 , 除 非 有 特 别 特 殊 的 需 求 会 走 物 化 视 图 。

 

( 七 ) 需 要 确 保 实 时 数 仓 中 存 储 的 数 据 量 在 合 理 的 访 问 内 , 以 确 保 不 会 产 生 过 多 的 服 务 器 资 源 账 单 。


在 控 制 数 据 的 存 储 量 上 我 们 通 过 C l i c k H o u s e 的 冷 热 分 离 思 想 , 将 热 数 据 存 储 在 C l i c k H o u s e 上 , 将 冷 数 据 存 储 在 S 3 上 , 以 控 制 服 务 器 资 源 。

图 9

 


 

结束语



本 文 我 介 绍 了 如 何 基 于 C l i c k H o u s e 的 百 亿 级 广 告 平 台 实 时 数 仓 构 建 实 战 。 在 数 仓 的 构 建 前 期 我 们 首 先 基 于 数 据 要 达 成 的 目 标 进 行 了 梳 理 。

图 1 0


 

我 们 在 S t a r R o c k s 、 C l i c k H o u s e 选 型 上 , 基 于 性 能 原 因 我 们 选 择 了 C l i c k H o u s e 。 在 具 体 的 实 现 细 节 上 我 们 没 有 像 传 统 数 仓 那 样 构 建 完 成 的 O D S 、 D W D 、 D W S 、 A D S 层 , 而 是 借 助 C l i c k H o u s e 的 物 化 视 图 和 p r o j e c t i o n 完 成 我 们 构 建 实 时 数 仓 的 目 标 。

其 实 在 该 架 构 中 , 可 以 将 接 入 K a f k a 原 表 和 外 部 表 的 数 据 理 解 为 O D S ( 贴 源 数 据 层 ) , 将 经 过 数 据 清 洗 转 换 后 的 基 础 表 理 解 为 D W D ( 数 据 明 细 层 ) , 将 基 于 基 础 表 衍 生 的 物 化 视 图 和 p r o j e c t i o n 等 统 计 数 据 理 解 为 D W S ( 轻 度 汇 总 层 ) , 基 于 视 图 我 们 还 可 以 接 着 构 建 视 图 , 表 和 p r o j e c t i o n 。

图 1 1




延伸思考



前 面 给 大 家 介 绍 了 我 们 的 实 时 数 仓 的 方 案 , 那 么 实 时 数 仓 是 如 何 演 化 来 的 呢 ? 下 面 多 说 几 句 , 跟 大 家 从 宏 观 上 说 下 大 数 据 的 行 业 发 展 , 以 便 于 能 够 从 一 个 更 高 视 角 理 解 实 时 数 仓 。 只 有 大 家 了 解 了 大 数 据 的 发 展 历 程 , 才 能 更 好 地 理 解 在 当 下 企 业 建 立 实 时 数 仓 的 必 要 性 , 以 及 我 们 未 来 实 时 数 仓 未 来 的 发 展 方 向 。

快 速 方 便 地 构 建 基 于 主 题 的 统 计 数 据 , 一 直 是 大 数 据 行 业 的 痛 点 , 最 初 解 决 该 问 题 的 方 案 是 H a d o o p 和 S p a r k 的 离 线 计 算 , 但 随 着 业 务 的 发 展 , 这 两 种 方 案 在 数 据 实 时 性 上 的 短 板 越 来 越 明 显 。 行 业 急 需 一 个 实 时 数 仓 方 案 , 但 是 在 实 时 数 仓 中 如 果 基 于 F l i n k 进 行 实 时 计 算 的 话 , 对 于 业 务 的 频 繁 变 更 带 来 的 开 发 成 本 又 变 得 不 可 控 。 因 此 大 家 又 把 目 光 投 向 了 M P P 架 构 , 这 种 架 构 基 本 上 达 到 了 1 个 S Q L 就 能 满 足 一 个 业 务 报 表 的 需 求 , 方 便 快 速 , 数 据 又 是 实 时 计 算 的 , 基 本 满 足 了 我 们 的 要 求 。 但 是 其 在 分 布 式 事 务 和 元 数 据 的 自 动 感 知 上 , 还 有 待 完 善 。

从 上 面 的 趋 势 中 也 可 以 看 到 大 数 据 发 展 的 阶 段 , 第 一 阶 段 大 家 基 于 大 型 M y S Q L 的 分 库 分 表 实 现 大 规 模 数 据 的 存 储 和 分 析 , 但 是 随 着 数 据 量 的 增 大 , 这 个 方 案 玩 不 转 了 。 于 是 出 现 了 H a d o o p 和 S p a r k 来 解 决 海 量 数 据 计 算 问 题 。 等 海 量 数 据 计 算 的 需 求 满 足 后 大 家 又 对 数 据 的 实 时 性 要 求 更 高 了 , 业 务 总 想 看 着 最 新 的 数 据 , 于 是 出 现 了 实 时 数 仓 。

图 1 2

但 是 问 题 到 这 里 并 没 有 完 , 后 续 必 然 在 实 时 数 仓 的 分 布 式 数 据 一 致 性 , 事 务 的 支 持 , 元 数 据 的 动 态 管 理 和 数 据 治 理 上 , 有 更 多 的 需 求 出 现 。 这 个 也 是 大 数 据 行 业 下 个 阶 段 要 解 决 的 重 点 问 题 。

 

因 此 大 数 据 不 像 关 系 型 数 据 库 那 样 有 稳 定 的 解 决 方 案 , 而 是 根 据 行 业 的 变 化 和 用 户 的 需 求 在 不 断 的 迭 代 和 更 新 。 其 最 终 目 标 是 既 能 像 关 系 数 据 库 那 样 满 足 A C I D 的 需 求 , 又 具 有 大 规 模 数 据 实 时 计 算 的 能 力 和 灵 活 的 数 据 分 析 能 力 。

最 后 要 说 的 是 C l i c k H o u s e 之 所 以 性 能 优 异 , 是 因 为 它 采 用 了 向 量 化 计 算 技 术 。 将 多 次 C P U 计 算 优 化 为 一 次 C P U 计 算 , 从 而 大 大 提 升 了 C P U 的 效 率 。 具 体 实 现 技 术 手 段 为 采 用   S I M D   ( S i n g l e   I n s t r u c t i o n   M u l t i p l e   D a t a )   技 术 实 现 单 条 指 令 操 作 多 条 数 据 , 在 C P U   寄 存 器 层 面 实 现 数 据 的 并 行 操 作 。  

向 量 化 计 算 可 以 说 是 M P P 架 构 的 “ 银 弹 ” , 目 前 C l i c k H o u s e 和 S t a r R o c k s 都 采 用 了 这 个 技 术 方 案 来 达 到 海 量 数 据 快 速 分 析 的 , 后 续 肯 定 会 有 更 多 的 数 据 库 方 案 跟 进 该 技 术 。 限 于 篇 幅 问 题 在 这 里 不 能 为 大 家 详 细 介 绍 向 量 化 计 算 的 魅 力 , 后 续 如 果 大 家 感 兴 趣 我 再 单 独 拿 出 来 讲 一 下 。

最 后 , 欢 迎 你 在 评 论 区 留 言 与 交 流 , 也 可 以 把 这 一 篇 分 享 给 你 的 朋 友 , 我 们 下 期 再 会 。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016482/viewspace-2886299/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2022-04-08

  • 博文量
    94
  • 访问量
    145405