dws实时数仓项目实践分享(一)
DWS_client加速入库方案
注:dws_client 2.0版本,本文只是作者在具体项目实践中的一些分享。本文内容可能信息已经错误或过时,仅供参考。
一、问题现象
dws_client入库时,存在性能缓慢问题,出现数据积压现象。
二、问题分析
1、现网使用dws_client入库,存在多种不同入库方式,建议使用auto或copy_upsert方式入库,当前现网主要使用copy_upsert入库。
writeMode参数含义:
- auto:数据量低于copyWriteBatchSize使用upsert方式入库,
否则使用copy_upsert方式入库。
- copy_upsert:无主键使用copy入库。
有主键使用copy + upsert入库。
2、不同入库方式性能差异较大。
根据现网实测大数据量下,copy性能优于upsert方式6倍以上。
针对不需要去重的场景,建议删除主键。
三、 解决方案
注意:现网是否可以删除主键需业务判断
修改入库方式writeMode:copy_upsert或auto
1、查询有主键的表:
select n.nspname schema_name,c.relname table_name,t.conname pk_name
from pg_namespace n,pg_class,pg_constraint t
where n.oid=c.relnamespace and t.conrelid=c.oid and t.contype='p'
and n.nspname='xxxx' and c.relname='yyyy'
注:xxxx为schema名,yyyy为表名,
2、删除主键
alter table schema_name.table_name drop constraint pk_name
注:红色部分根据实际情况替换
1.4. dws-connector(dws_client)入库参数建议
根据集群算力,按单并发每秒入库7000条数据,一天数据积压时按4小时入库完成。
注:以下设置针对当前环境,后续可根据实际情况调整。
1、修改入库方式writeMode参数
writeMode:copy_upsert或auto
日数据量1000w以内auto,超过1000w建议设置为copy_upsert
- 基于copy入库性能是upsert性能6倍以上的实测数据,针对日数据量大表(暂定2亿为界),建议尽量不设置主键,使入库可以走copy。
- client内部入库线程池大小threadSize=1
- 建议kafka的topic和dws入库sink并发量比例设置为1:1。
日数据量大于6亿可根据按如下设置并发
- 按日数据量,合理调整parallelism值,建议1亿以下设置为1;1亿以上按日数量/2亿(或3亿)。
- autoFlushMaxInterval建议越大越好,建议设置1分钟以上,可根据业务实时需要设置5s以上
- copyWriteBatchSize/autoFlushBatchSize:建议1亿以上大表设置为min(10000~50000,7000*autoFlushMaxInterval/3),也可简化设置为10000。
- metadataCacheSeconds建议设置为360000
详细设置见下面表格。
日数据量 |
<0.1亿 |
<1亿 |
<3亿 |
<10亿 |
>10亿 |
threadsize |
1 |
1 |
1 |
||
writemode |
auto |
copy_upsert /auto |
copy_upsert |
||
autoFlushBatchSize /copyWriteBatchSize |
1000 |
10000 |
min(10000~50000,7000*autoFlushMaxInterval/3) |
||
topic |
1 |
1 |
1~4 |
2~10 |
日数据量/3亿~日数据量/1亿 |
sink.parallelism |
1 |
1 |
1~2 |
2~5 |
min(日数据量/3亿~日数量/2亿,10) |
- 点赞
- 收藏
- 关注作者
评论(0)