作业帮基于 StarRocks 画像系统的设计及优化实践( 五 )

codis+发号器替换为 mysql 主键自增 , 此方案并未经过实际测试就目前的场景是可以满足需求的 , 弊端在于 flink 任务重启后会对 mysql 造成比较大的冲击【flink 增量 checkpoint 无人维护存储所以暂未使用】 , 做好 mysql qps 限流后会造成一段时间的数据延迟 。 好处在于任务实现简化同时可以避免一些特殊情况导致的同一 cuid 被分配多个 guid 造成数据错误的情况 。
(3)分发过程
根据标签类型将 mapping 后的数据分发到独立的 kafka topic , 方便写入 StarRocks 时表级别管控 。
(4)入 StarRocks 过程
利用 flink-starrocks-connector 将标签数据写入 StarRocks 。 注意考虑写入频次、数据行数、数据大小等参数配置 。
(5)cuid 离线补充映射
实时已接入激活标签流数据 , 为防止出现遗漏及第一次初始化数据采用小时级增量补实时未覆盖的 cuid 。
4、离线标签接入
常规标签数据当计算完成后可统一写入指定的高表【建表语句见下方】中 , 以高表为媒介做到标签开发和接入的解耦 。 带有修饰、行为类标签数据可直接利用基础数仓表和标签源数据信息完成自动接入 。
(1)接入规范
离线接入大概分为两类数据源 , 高表接入、数仓行为数据接入 。
高表接入

  • 标签计算后写入高表【已按 cuid 排重】,tagkv 为 map 结构 , 其中 key 为标签名字 。
  • 高表中如果存增量数据数据接入走增量逻辑 , 如果为全量标签走全量接入逻辑 。
  • hive 建表 sqlcreate table picasso_all(
cuid string comment '同用户唯一标识体系下的唯一 id',
tagkv Map<string, string> comment '组合标签 kv 数据'
partitioned by (dt string, tagk string)
stored as parquet
数仓行为数据接入:
  • 只能应用于单表且需包含 cuid
(2)接入步骤
  • 任务入口:通过画像服务接口获取需要导入的目标表名字 , 然后通过调度系统 api 创建并行接入任务 , 以下为每个任务的执行逻辑。
  • 状态检查:根据目标表名通过画像服务接口获取需要导入此表标签对应的数据来源信息、hive 字段映射等信息【目前仅支持 hive 数据源】 , 检查依赖数据状态 。
  • 数据校验:以元数据配置规则为标准校验标签数据 , 例如标签枚举值合理性、数值型标签取值范围、空值率等 。
  • 数据组装:根据不同业务场景利用 insert overwrite directory select 组装数据【场景匹配 sql 模板、补充 guid 等】并写入 cos/hdfs 等存储 。
  • 数据导入:建表/分区 , 利用 StarRocks Broker Load 方式导入数据 。
  • 原子切换:调用画像服务接口 , 接口内完成表相关字段校验、与线上数据交换临时分区/表 , 归档临时分区/表用于回滚
  • 恢复现状:删除此过程中产生的临时文件 。
(3)数据组装
作业帮基于 StarRocks 画像系统的设计及优化实践
文章图片

四、未来规划
  • 标签内容还需持续迭代 , 此部分主要为业务需求驱动 。
  • 单用户规则判定能力支持 , 用于解决例如某种活动、权益等参与资质判定 。
  • 标签数据多表冗余 , 根据人群圈选 DSL 支持自动化路由查询 , 以加快人群数计算速度 。
  • 实时、离线标签接入目前是通过通用化工具实现 , 可考虑和调度系统、数据地图系统打通进一步打通 , 实现标签生产、接入平台化 。
  • 标签准确是核心 , 为保证准确性还需要丰富标签接入过程的数据校验部分 , 支持更多数据校验方式比如分布同环比等 。
作者介绍:

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。