NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Flink & 低代码:为应用实时计算铺平道路

  • 2022-07-18
  • 本文字数:2991 字

    阅读完需:约 10 分钟

Flink & 低代码:为应用实时计算铺平道路

嘉宾 | 张颖

编辑 | 贾亚宁


目前京东实时计算平台已经发展到了一定规模,且在 Flink 的应用上也积累了很多经验与反思。本次我们专访了京东数据分析优化部的算法工程师张颖老师,期待能从京东落地 Flink 的过程中获得一些应用 Flink 的经验和启发。


同时张颖老师也是已经上线的 QCon+ 案例研习社「Flink 在实时计算应用场景中的落地实践」专题的讲师,带来了「基于 Alink 实现 Prophet 时间序列模型」的分享。

InfoQ:你最近主要在做什么呢?


我在京东数据分析优化部主要负责实时计算相关的工作,目前京东实时计算平台已经发展到了一定的规模,它紧跟社区,先后推动了批流一体、云原生等多个技术的落地。为了降低各业务实时计算的开发和学习成本,我们在原有的 Flink 计算引擎基础上研发了一套低代码的配置化编程系统,他学习成本低、易用性强、可移植性高,并且支持配置化编程。

InfoQ:方便重点讲讲这个低代码的系统吗?它和传统的低代码平台相比有什么不同?


这个低代码平台原计划是小白用户来使用的,可以通过拖拉拽直接生成一个 Flink 任务的引擎,但在实际使用的过程中,我们发现有开发经验的用户更倾向于通过简单编码来实现。这里举一个例子:对于复杂的 Flink SQL 而言,囿于产品本身的特性,需要限制部分操作或增加用户配置才能实现拖拉拽;但是有开发经验的用户直接修改 SQL 就可以直接达到目标。于是我们将这个平台调整了一下,在实现拖拉拽功能的同时开放一些配置,用户可以直接编程实现,这就完美地解决了上述问题。


低代码平台实时框架结构

上面这张图是我们实时框架的主要结构,包含:

  • process 层:这里统一了 DataStream、StreamSQL 和 Batch SQL(社区基本不再维护 DataSet),支持用户 UDF;

  • operator 层,这里是具体的业务层,包括一些算子的执行策略,operator 之间的串联方式是有向无环图,可以实现用户任何方式的算子组装;

  • node 层,这里支持用户将每个业务串联执行,用户将任务放在 AIFlow 里面,AIFlow 负责将各个任务正常调度。

InfoQ:京东目前在哪些场景中使用 Flink,未来还会拓展哪些新的场景呢?


京东的大部分场景在实时计算方面都已经切换到 Flink 了,像比如说京东的榜单服务,流式计算就已经完全切到 Flink 上了。这个榜单任务流式计算类似一个 TopN 的 Flink 任务,因为数据量比较大,我们把数据经过过滤、排序等操作,再放到 HBase 里面来实现 TopN。


机器学习场景,除了使用 Alink 的固有模型之外,我们还支持 Alink 分布式调用 Python 和基 Python 的小模型分布式训练。还有诸如样本拼接、Label 拼接、Feature 拼接等拼接场景,我们都希望可以实现批流一体。如果模型实时训练时出现了效果降低的情况,我们就需要回退一个版本,与此同时样本也全部都回滚。但是直接回滚 Kafka 里面的数据可能已经过期了,这时就需要借助离线,这里面会涉及到一些数据的 gap,但是如果在代码层面上完全实现了批流一体的话,会非常有利于这种 back filled 的场景。


既然样本分实时和离线的话,那么 Feature 和 Label 势必也是要分实时和离线的,所以代码层面流批一体的统一对开发者来说有非常大的好处。我们希望利用 Flink 将大数据生态以及机器学习生态紧密联合起来,让数据和机器学习更好地支持和服务于业务场景。


InfoQ:你认为 Flink 会取代 Spark 吗?为什么呢?


Flink 在实时计算方面已趋于成熟,但是批流一体还是有待发展的,比如说我们在某个业务中用批式来实现,但是后来发现它不能完全解决问题,就想利用 Flink SQL 的批流一体无缝切换到实时,但在实现的过程中发现有些流式的 SQL 和批式的 SQL 写起来就是不一样的,并且他们包括 shuffle 等的底层原理也不一样。


经过实际的验证,我们发现当流式资源是批式资源的三倍时才能稳定下来,且在相同数据量的情况下,批式的处理时间也比流式小。这是因为流式的数据是一条一条的,大部分的数据都存在于内存中,涉及到 join 的话,哪怕是用到了 RocksDB,也还是需要配置一定的内存(WriteBuffer、BlockCache 等)。


但是对于 Batch Mode 是有很多数据直接 shuffle 到了硬盘上,并且它是分阶段来执行的。在这种情况下 Batch Mode 需要的资源相对来说要少很多,但是资源问题没有解决的话,我们又没有办法将这些批流一体的代码上线。如果社区能够逐步解决这些问题,相对 Spark 来说 Flink 的优势会持续增大,接下来社区也会着重发展这部分。

InfoQ:你对数据报警研究的比较深入,你认为一个好的报警系统要满足什么要求?


传统的同环比、统计类报警过度依赖规则与阈值超参数的设定,存在报警不稳定、误报率高等问题,且从故障发生到报警时间较长,会给业务带来困扰,要检查一个报警系统的好坏,除了报警的延时,报警的准确之外,还有很多其他的评判标准,在这里我们只关心一种情况,就是如何将这个报警智能化。


比如京东榜单服务每天高低峰分别是 2000、1000 QPS,我们在设置报警时,大概率会将最高值和最低值设置为:2000 和 1000,也可能会有一个浮动的报警(一般浮动值设置后误报的几率也会增加)。我们假设某一天晚高峰的流量是 1200 QPS,由于它高于最低值,报警是不会预测到的,但是晚高峰应该是 2000 呀,这就偏离了业务的需求。


于是,我们研发了一个基于机器学习的报警,一般分为三步:

  • FFT 检查数据是否有周期性特点

  • Prophet 进行时序预测

  • DBSCAN 检测异常点


任何一个公司或者是业务的报警数据量都非常庞大,在海量数据实时涌入的情况下,我们一般会采用根据数据指标的数据并行的方式来进行模型的训练及预测,映射到 Flink 里面,我们就是将这些指标数据作为 key,然后以此 key 来进行 keyBy,达到让这些数据都分别落到相同的 subtask 里面去的目的。


在实现的过程中我们采用数据并行的方式训练模型,并且采用了模型训练和预估一体化的技术策略。这种基于机器学习模型的报警模式完美地解决了传统链路的不足,因此也解决了业务问题,可以做到提供人性化的报警服务。

InfoQ:最后,对想要深入了解并应用 Flink 的小伙伴说些什么吧!


我给大家分享一个我平常学习 Flink 的时候,经常采用的方式。


大家在遇到 Flink 的一些相对来说比较陌生的函数或者功能的时候,一般可能会去百度或是 Google,这种学习方式肯定没问题。但是对我自身而言最快的一种方式是,在使用搜索引擎之前先去 Flink 官网查资料,也可以直接把 Flink 的代码从 GitHub 上复制下来,当我遇到一些问题时(比如遇到一个 Left join 不会写或是一个 data set 应该如何使用)就可以直接去代码库里全文搜索,得到的结果一般甚至都是带有测试用例的,这样就非常高效地解决了问题。


另外一种情况是遇到的新场景不知应该如何处理,大家最常见的应对方式可能是按照自己已有的思维来解决,这可能会因为自身的认识不足,使得方案明显不完善。我是这样应对的:访问一些 Flink learning 的网站,或者在社区内搜索相关的场景,有的时候也添加一些相关的钉钉群,在群里面问问别人的实现方案,这个时候往往都会有意想不到的收获。类似大厂案例的技术落地最佳实践的分享,也可以带来一些启发和指导。


概括来讲,我们日常就需要拓展一下自己的技术范畴和技术视野,比如 Flink learning 网站、社区公众号、钉钉群、Flink AI extend、Ververica 和 InfoQ 等媒体都会发一些相应的代码或者是测试包,这也是解决问题非常便捷的方式。

作者简介


张颖,京东数据分析优化部算法工程师,实时方向负责人。Alink、dl-on-flink Contributor,专注 Flink 数据处理方向和机器学习方向。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2022-07-18 17:013476

评论

发布
暂无评论
发现更多内容

深度学习与预训练语言的突破

百度开发者中心

自然语言处理 大模型训练 人工智能「

预训练模型在NLP中的应用与优化

百度开发者中心

自然语言处理 大模型训练 #人工智能

强化学习与深度学习相结合的新趋势

百度开发者中心

#人工智能 LLM 大语言模型

人工智能 | 无人驾驶汽车:道路安全和效率的未来

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶汽车的未来:道路安全与出行革命

测吧(北京)科技有限公司

测试

华为云CodeArts Check代码检查插件(Cloud IDE版本)使用指南

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

住宅socks代理对于爬虫来说有什么帮助?

巨量HTTP

socks5代理

人工智能—走向智能化生活

测吧(北京)科技有限公司

测试

人工智能 | AI驾驶系统:改变汽车产业的革命

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶与城市规划

测吧(北京)科技有限公司

测试

人工智能 | 革命性的物流与运输

测吧(北京)科技有限公司

测试

微信审核趋严,小程序引流需要配一个小程序化App

Speedoooo

超级app 小程序化App superapp App小程序化

大模型训练:文本分类的未来之路

百度开发者中心

大模型训练 #人工智能

华为云CodeArts Check代码检查插件(CodeArts IDE本地版本)使用指南

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

ABAQUS常用功能总结,推荐给自学的朋友们!

思茂信息

abaqus abaqus软件 abaqus有限元仿真

腾讯云大数据ES:一文秒懂!使用Elasticsearch进行数据分析

腾讯云大数据

elasticsearch

Lightroom Classic for mac(Lrc2021) 10.3激活版

mac

LRC2022 照片编辑软件 苹果mac Windows软件 Lightroom Classic 2022

人工智能 | 机器学习与自动驾驶

测吧(北京)科技有限公司

测试

实现语言理解与生成的新前沿

百度开发者中心

大模型训练 #人工智能 LLM

城市交通的未来服务:迎接便捷、可持续和智能的交通体验

测吧(北京)科技有限公司

测试

香港服务器购买指南:如何挑选最适合你的网络解决方案?

一只扑棱蛾子

香港服务器

议题征集|Flink Forward Asia 2023 正式启动

Apache Flink

大数据 flink 实时计算

人工智能 | 自动驾驶技术:实现未来的智能交通

测吧(北京)科技有限公司

测试

Mybatis in Springboot

Kevin_913

Java mybatis

软件测试/测试开发丨Python深拷贝与浅拷贝 学习笔记

测试人

Python 软件测试 测试开发 深拷贝与浅拷贝

中企全球化案例-能源业:“1+2+3+N”,建设全球领先的智慧司库平台

用友BIP

全球司库 中企出海

优化模型之“平均检出率”

矩视智能

深度学习 机器视觉

人工智能 | 自动驾驶的伦理挑战

测吧(北京)科技有限公司

测试

人工智能 | AI驾驶系统的安全性

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶与卫星导航

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶与环境保护

测吧(北京)科技有限公司

测试

Flink & 低代码:为应用实时计算铺平道路_大数据_Alice_InfoQ精选文章