目标的数据流架构图
当前Doris集群环境:
Doris版本:0.14.7
服务器数量:13台
服务器配置:16核64G
FE Follower数量:3台独立部署
BE 数量:10台,2台与FE Observer混布,8台独立
FE Observer:2台,与BE混布
业务量级以及需求:
1. 整个数仓都在Doris上,Flink通过Stream load方式写Doris
2. ODS近500张表
3. ODS数据通过flink实时同步,每10秒钟同步一次所有500张表
4. ODS事实表数据量2KW-10KW,日增量50W-100W
5. 业务存在大量历史数据更新操作,经常对全表数据更新,经常造成Flink需要同步全量数据,在Doris中合并
6. 离线ETL为T+1延迟,每天反刷前一天实时数据
7. 前端有应用直连Doris,需要有一定并发要求,100QPS下,对事实表简单的Group By Sum查询,延迟在100ms以下。
当前集群状态设置:
1. ODS层使用Unique Key
2. DWD与DWS层使用Aggrate Key,非主键列全部使用Replace_if_not_null方式
3. ETL为自研工具,调度Python包读取Sql语句,执行ETL
4. 版本合并相关:
BE Compaction Score稳定状态维持在200左右
BE CPU占用稳定维持在50%
BE配置:compaction_task_num_per_disk=7
BE配置:max_cumulative_compaction_num_singleton_deltas=500
5. 内存设置相关:
全局变量:load_mem_limit = 4G;
全局变量:exec_mem_limit = 30G
执行内存影响DWD和DWS的离线ETL,设置超过30G,BE会OOM
设置24G,执行ETL显示执行内存不足
之后的计划:
我们当前只将一个业务线的客户数据放在了Doris上,还有两个其它业务线,以及公司内部数据,计划从KUDU集群迁移至Doris。这部分数据会导致整体数据量翻倍,ODS层的写入频次翻倍(再增加400张ODS表,也需要Flink实时写入同步)。DWS层也会有更多用户访问,应用接入。
因此需要考虑对Doris集群进行扩容或者架构调整。
目前有以下一些思路:
硬件角度
1. 对当前10个BE节点进行纵向扩容(增加单机cpu,内存)
2. 对集群进行横向扩容,增加BE节点数量
业务角度
1. 把ODS层(flink频繁写入,版本合并压力大)与其他层分离至不同Doris集群,
使得ODS的高频写入不影响其他层的ETL和查询
2. 不同的业务线,放在不同的Doris集群上,避免业务之间的相互影响。
3. 全部放在一个大集群中。
想寻求一下各位对于扩容的建议和意见,使用哪种思路扩容比较合适,亦或者有其它的扩容思路。
主要是进行BE节点级别的隔离,FE其实不用隔离,我们暂时还有遇到FE需要隔离的情况。
这个功能可能会在7月份发布
感谢详尽的答复
关于问题1,感谢建议,我们会进行采纳,先对集群进行纵向扩容,通过硬件减缓OOM的问题。
关于问题2,我们目前使用的已经是SSD了,根据grafana监控显示,BE的磁盘读写维持在20%以下。
关于问题3,感觉这是一个相当有有用的功能。希望了解下,资源标签这项功能的版本,其大概的计划发布时间。此外,这项资源标签,主要隔离的是BE的运算资源,还是FE和BE都进行隔离。
这里有几个问题:
1. OOM的问题。
这个主要是因为目前Doris 的内存控制还不是很好,有些内存没有记录。导致即使配置了mem limit,也会有oom的问题,这个doris社区一直在改进。对于你这种有etl和ods层场景,比较建议使用大内存机器(128甚至256G)。如果CPU目前没吃满的话,建议纵向扩容。
2. Compaction的问题
Compaction Score在200有点高了,不知道你们是不是ssd,如果是ssd的话,应该会好很多,不然IO util 可能会很高,影响集群。
3. 业务之间隔离
后续版本我们会通过资源标签的方式对集群内的节点进行划分,从而进行集群内部节点级别的资源隔离,应该可以解决你的业务隔离的需求。
首先赞一下这个问题的详细程度~