业务方使用 State 的场景多是 get-update,在使用 RocksDB 作为本地状态存储的过程中,出现过以下问题:
- 爬虫数据导致热 key,状态会不断进行更新 (get-update),单 KV 数据达到 5MB,而 RocksDB 追加更新的特点导致后台在不断进行 flush 和 compaction,单 task 出现慢节点(抖音直播场景) 。
- 电商场景作业多数为大状态作业 (目前已上线作业状态约 60TB),业务逻辑中会频繁进行 State 操作 。在融合 Flink State 过程中发现 CPU 的开销和原有~~ 的~~ 基于内存或 abase 的实现有 40%~80% 的升高 。经优化后,CPU 开销主要集中在序列化 / 反序列化的过程中 。
- 减少 CPU 开销 : 通过对热点数据进行缓存,减少和底层 StateBackend 的交互次数,达到减少序列化 / 反序列化开销的目的 。
- 提升 State 吞吐能力 : 通过增加 Cache 后,State 吞吐能力应比原有的 StateBackend 提供的吞吐能力更高 。理论上在 Cache 足够大的情况下,吞吐能力应和基于 Heap 的 StateBackend 近似 。
- Cache 功能通用化 : 不同的 StateBackend 可以直接适配该 Cache 功能 。目前我们主要支持 RocksDB,未来希望可以直接提供给别的 StateBackend 使用,例如 RemoteStateBackend 。
PB IDL 裁剪
在字节内部的实时特征离线生成链路当中,我们主要依赖的数据流是 Kafka 。这些 Kafka 都是通过 PB 定义的数据,字段繁多 。公司级别的大 Topic 一般会有 100+ 的字段,但大部分的特征生产任务只使用了其中的部分字段 。对于 Protobuf 格式的数据源,我们可以完全通过裁剪数据流,mask 一些非必要的字段来节省反序列化的开销 。PB 类型的日志,可以直接裁剪 idl,保持必要字段的序号不变,在反序列化的时候会跳过 unknown field 的解析,这 对于 CPU 来说是更节省的,但是网络带宽不会有收益,预计裁剪后能节省非常多的 CPU 资源 。在上线了 PB IDL 裁剪之后, 大部分任务的 CPU 收益在 30% 左右 。
遇到的问题
新架构特征生产任务本质就是一个有状态的 Flink 任务,底层的状态存储 StateBackend 主要是本地的 RocksDB 。主要面临两个比较难解的问题,一是任务 DAG 变化 Checkpoint 失效,二是本地存储不能很好地支持特征状态历史数据回溯 。
- 实时特征任务不能动态添加新的特征:对于一个线上的 Flink 实时特征生产任务,我们不能随意添加新的特征 。这是由于引入新的特征会导致 Flink 任务计算的 DAG 发生改变,从而导致 Flink 任务的 Checkpoint 无法恢复,这对实时有状态特征生产任务来说是不能接受的 。目前我们的解法是禁止更改线上部署的特征任务配置,但这也就导致了线上生成的特征是不能随便下线的 。对于这个问题暂时没有找到更好的解决办法,后期仍需不断探索 。
- 特征状态冷启动问题:目前主要的状态存储引擎是 RocksDB,不能很好地支持状态数据的回溯 。后续规划
出于实现统一推荐场景下特征生产的目的,我们后续会继续基于 Flink SQL 流批一体能力,在批式特征生产发力 。此外也会基于 Hudi 数据湖技术,完成特征的实时入湖,高效支持模型训练场景离线特征回溯痛点 。规则引擎方向,计划继续探索 CEP,推动在电商场景有更多落地实践 。在实时窗口计算方向,将继续深入调研 Flink 原生窗口机制,以期解决目前方案面临的窗口特征数据退场问题 。
- 支持批式特征:这套特征生产方案主要是解决实时有状态特征的问题,而目前字节离线场景下还有大量批式特征是通过 Spark SQL 任务生产的 。后续我们也会基于 Flink SQL 流批一体的计算能力,提供对批式场景特征的统一支持,目前也初步有了几个场景的落地;
- 特征离线入湖:基于 Hudi On Flink 支持实时特征的离线数仓建设,主要是为了支持模型训练样本拼接场景离线特征回溯;
- Flink CEP 规则引擎支持:Flink SQL 本质上就是一种规则引擎,目前在线上我们把 Flink SQL 作为业务 DSL 过滤语义底层的执行引擎 。但 Flink SQL 擅长表达的 ETL 类型的过滤规则,不能表达带有时序类型的规则语义 。在直播、电商场景的时序规则需要尝试 Flink CEP 更加复杂的规则引擎 。
推荐阅读
- 关于2020年的预言霍金 霍金预言:2035年
- 花茶保存5年还能喝吗 花茶一年了还能喝吗
- 安吉白茶放了5年还能喝吗?安吉白茶的保质期一般是多久
- 1955年的飞机失踪案 1955年一架飞机神秘失踪
- 手机使用5年已经是极限,出现这3个问题就没必要将就,该换机了
- 1935年5月,原西北军将领 1920年初一连红军战士的神秘失踪事件
- 1975年发明第一台数码照相机的是 一个80万像素的数码相机,它可拍摄
- 苹果手机为何能用很久?系统一直更新,5年前机型仍不放弃
- 安禄山攻占洛阳、长安 安禄山叛乱
- 1776年谁发明了第一台有实用价值的蒸汽机 1765年英国人发明了蒸汽机
