在我们平台的发展过程中,遇到许多痛点也踩到过许多坑,基于这些背景与现状,所以我们选择Flink,文档中也详细的介绍了我们选择flink的原因,我相信选择flink之后,我们平台的未来发展之路将是一片光明。

注脚

展开查看详情

1.基于Flink的实时特征平台 姓名:刘康 公司:携程 职位:技术中心大数据资深研发工程师

2. 平台开发背景 01 及平台现状

3.原实时特征作业的开发运维 计算平台:依据项目的性能指标(latency,throughput等),在已有的实时计算 平台:Storm或Spark中选择 开发运维流程 1. 80%以上的作业需要用到消息队列数据源,但是消息是非结构化数据且没有统一 的数据字典,需要通过消费对应的topic,解析消息和确定所需的内容 2. 基于需求中的场景,设计开发计算逻辑 3. 在实时数据不能完全满足数据需求的情况,开发单独的离线作业以及融合逻辑 4. 设计开发数据的校验和纠错逻辑 5. 测试上线&监控和预警 平均每个作业耗时:3天-5天

4.痛点 •  消息队列数据源结构没有统一的数据字典 •  特征计算逻辑高度定制化,开发测试周期长 •  实时数据不能满足需求时,需要定制离线作业和融合逻辑 •  校验和纠错方案没有形成最佳实践,实际效果比较依赖个人能力 •  监控和预警方案需要基于业务逻辑定制

5.平台的⽬目标 •  实时数据字典:提供统一的数据源注册、管理功能,支持单一结构消息的 topic和包含多种不同结构消息的topic •  逻辑抽象:抽象为SQL,减少工作量&降低使用门槛 •  特征融合:提供融合特征的功能 •  数据校验和纠错:提供离线数据校验和纠错实时特征的功能 •  实时计算延迟:ms级 •  实时计算容错:端到端 exactly-once •  统一的监控预警和HA方案

6.特征平台系统架构

7.平台功能展示-数据源注册

8.实时特征编辑-基本信息

9.实时特征编辑-数据源选择

10.实时特征编辑-SQL计算

11.实时特征编辑-选择输出

12.实时特征编辑-选择可选的输出

13.02 选择Flink的原因

14. spark storm Structured flink V1.2.2 Streaming v1.5 v2.3.1 MicroBatch Streaming 100ms级 Streaming 延迟 ms级 Streaming ms级 ms级(实验) Ack CheckPoint&WAL CheckPoint&SavePoint 容错 atLeastOnce exactlyOnce exactlyOnce SQL成熟度 dis?nct、limit、order (Unsupported aggrega?on、join dis?nct aggregate by(par?al) Func>ons)

15.03 Flink实践

16.使⽤用⽤用例例 会话窗口用途广泛,可以用于推荐召回、用户召回等;原设计⽅案需要使⽤分布式锁 SessionWin 做进程间的并发控制,复杂度高 select user,count(ts) from vac_ts group by SESSION(userEventTime_ts, INTERVAL '10' SECOND),user External 实时计算job执行异常设置的重启策略无法恢复需要修复bug时,如果设置了 CheckPoint externalCheckPoint,很大几率保证exactly Once的语义

17.兼容开发 AS Async 基于flink Asynchronous I/O开发(支持exactlyOnce语义) Upsert 异步写入AS TableSink 写入AS成功后可选择push key至Kafka 支持Upsert Stream的TableSink UDF-AS 通过定义Table Function类型的UDF支持,SQL中用到AS数据的情况 Table Functions 示例: SELECT ID, cityId, cityName FROM product LEFT JOIN LATERAL TABLE(asGetBins(productId)) as T(cityId,cityName) ON TRUE AS=Aerospike

18.碰到的坑 内部默认反序列化JSON中SQL_TIMESTAMP类型时,值必须是格式为yyyy-MM- SQL_TIMESTAMP dd’T'HH:mm:ss.SSS'Z'的字符串 场景:直接使用StreamTableEnvironment的方法registerTableSource注册表时,表 中的时间属性(eventTime)字段的类型需要配置为SQL_TIMESTAMP 窗口的offset需要⼩于winSize,不能⽤于时区适配 SlidingWin 下面是当前计算win的start值的公式 Offset timestamp - (timestamp - offset + windowSize) % windowSize

19.04 平台当前效果 &未来规划

20.特征平台当前效果&规划 •  当前效果:将实时特征上线周期从原平均3天-5天降至小时级 •  未来规划: 1. 完善特征平台的功能:融合特征等 2. 简化步骤,提高用户体验 3. 根据需求,进一步完善SQL的功能例如支持win的开始时间offset,可以 通过countTrigger的win等

21.模型⽣生态的进⼀一步规划

22.Thanks !

user picture
Apache Flink China中文社区,致力于Flink技术在中国的推广与传播。

相关文档