clickhouse 实时数据更新方案求助

164 天前
 KJH

各位大佬架构师们,紧急求助

我们有个报表类的需求,目前架构设计如下

数据量:1TB 左右 数据流转流程 业务数据->( kafka 、flink )->数据仓库( MySQL)->通过 ETL 抽取->Clickhouse->报表呈现

由于我们报表对实时性要求比较高,而且在生成报表的时候涉及到的表多、逻辑也复杂,不得已我们将数据仓库的数据原封不动的同步到了 clickhouse ,后面在进行报表生成计算的时候,全部查 clickhouse 的数据最后生成大宽表。

我知道 clickhouse 是列式存储,对数据得删除和更新都是重量级操作,而我们的数据都是业务数据,更新比较频繁,所以我们采用了先删后插的策略,alter table delete (同步删非异步)。

这就导致我们的数据更新周期最低也要 1 个小时

之前考虑个几种方案

  1. 使用 ReplacingMergeTree 引擎,只追加数据,不删除,然后查询通过 final 或这 argMax 取最新数据,但是这有两个问题,一:final 没办法进行表关联查询, 二:argMax 对我们改动太大太大,表字段页表字段也比非常多( 100+)
  2. 对于实时性要求高的报表 不再去查 clickhouse , 直接查数据仓库

我比较中意第二种,因为我是在想不出更好的方案了,想请教下各位架构师们有没有比较好的方案

在此拜谢

4295 次点击
所在节点    程序员
41 条回复
pulutom40
164 天前
我有个跟你类似的需求,用的是 Starrocks ,sr 使用聚合索引表,需要经常更新的值设置成 replace 聚合,每次新插入就更新了。

目前 4T+数据
superliy
164 天前
StarRocks 感觉使用场景很多啊,用过的人都说好。。
yh7gdiaYW
164 天前
doris 或 starrocks ,这俩本质上差不多,没有二次开发能力不要碰 clickhouse
KJH
164 天前
@nedqqcc @yh7gdiaYW 好的,目前在尝试 doris


@pulutom40 @superliy 云服务商不支持 starrocks [捂脸] 只能考试 doris 了
NotLongNil
164 天前
@KJH #17 如果使用轻量删除,控制好时间和每次删除的数量,性能还是很可观的
bitmin
164 天前
我数据量还很少,买的阿里云的 selectdb ,也就是 doris ,自己布了个 Apache SeaTunnel 在同步数据,希望你们多用用帮我多踩踩坑
KJH
164 天前
@NotLongNil ok 我们也考虑试试 ,谢谢

@bitmin 你的 doris 是哪个版本呀
NoString
164 天前
如果必须是 Ck 我可以提供一个思路,就是分区 REPLACE ,每次更新就建一个复制表 写入之后就 REPLACE 分区,这样基本都是平滑且是 O1 ,然后更新频次就看写入速度了
NoString
164 天前
可以小小参考一下: https://kelovp.tech/nostring/blog/1712/
bitmin
164 天前
@KJH selectdb 内核版本 4.0.4 。合入了 Apache Doris v3.0.3 版本的所有功能、改进优化和问题修复。
ForMrFang
164 天前
同碰到这个问题,但使用 final 跟用 mysql 差别也不太(指性能很慢). 用 argmax 有拿不准的时候, 最后用了阿里的 ADB.
1996wang
164 天前
doris 和 sr 已经开始有功能上的差异了,更推荐 doris.
比如加列,doris 快速加列功能很好用.而 sr 加列很慢
如果是阿里云,推荐阿里云的 hologres
ChenKeLiang
164 天前
hologres 不错。
haimianbihdata
163 天前
去看一下 doris 跟 starrocks ,而且你都有 flink 了。链路打通不难的
KJH
163 天前
@NoString 是有考虑过轻量级删除,但是后面想要长久的稳定运行,总觉得不是最终方案,可以作为临时方案过度一下,我们也考虑考虑

@bitmin 那还挺新的

@ForMrFang 阿里可选择的东西确实比较多

@1996wang 哈哈 正在写方案了,后面就测试下性能

@ChenKeLiang 我了解下

@haimianbihdata 我们 flink 只对接了数据仓库,想要再对接其他的涉及到服务器成本和开发成本,现在都在降本增效 T.T
haimianbihdata
162 天前
@KJH 可以这样的。业务库要用到的表直接同步过来,然后整个计算回到 doris ,starrocks 库上,配个海豚调度做好分层。flink cdc 可以实时抽数据。
KJH
162 天前
@haimianbihdata 感觉这个方法可以哦,我尝试尝试,感谢感谢,
haimianbihdata
162 天前
@KJH 而且可以去试试。物化视图,分钟级别数据,其实也可以跑批实现伪实时
KJH
145 天前
@v2day 大佬 请教个问题,目前 doris 作为 ods 层,mysql-> doris 已经验证都 ok 了 没啥问题,但目前由于产品在云上,可选择的工具很少,这就导致了 dwd dws 层的数据不太好生成,
如果使用数据库自带的 insert into select 不太好监控执行情况以及后续的运维,

想请教下,目前生成 dwd dws 大宽表 比较好的方案是什么
v2day
145 天前
部署个 DolphinScheduler 调度工具( Apache 开源),只需要 SQL 调度的话,有个 4c4g 的资源部署下即可
- 创建 jdbc 数据源
- 创建 ETL 调度任务
- 任务支持 动态传参、失败重试( SQL 上设计好幂等性,重试不影响数据结果)、任务编排
- 配置任务状态告警(如果失败发送告警)
- 有可视化状态监控

---
同类产品如还有 青龙面板、N8N 这两个定时、任务编排的 工具

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1123606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX