AICon日程100%就绪,9折倒计时最后一周 了解详情
写点什么

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 数据处理方向和机器学习方向。

2022-07-18 17:013652

评论

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

香港云服务器的火爆市场,下一个未来发展将会怎么改变?

九河云安全

面向大规模商业系统的数据库设计和实践

百度Geek说

数据库 后端 数据库设计 数字化

唯品会三年,我只做了5件事,如今跳槽天猫拿下offer(Java岗)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

现成FIL分币系统介绍|FIL分币平台搭建

Geek_23f0c3

Filecoin fil挖矿 FIL挖矿分币系统

【“互联网+”大赛华为云赛道】API命题攻略:厘清三步解题思路,用好开发工具

华为云开发者联盟

API 华为云 modelarts 互联网+ API Explorer

单元测试:GTest之事件机制(一)

正向成长

测试 测试 单元测试 GTest

香港云服务器的性能提升对行业服务带来显著动力

九河云安全

IM之Qunar实现

Qunar技术沙龙

架构 IM 办公 客服 消息

GitHub标星过万!亦直问JVM(1)

Java 程序员 后端

云原生 | 混沌工程工具 ChaosBlade Operator 入门篇

RadonDB

混沌工程 RadonDB KubeSphere

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

GitHub标星8k!Java虚拟机5大核心知识点

Java 程序员 后端

使用 PolarDB 和 ECS 搭建门户网站

若尘

阿里云 Polar 8月日更

全民K歌跨端体系建设

Edwiin

跨端 hippy 全民K歌

价值连城 神经网络- 吴恩达Andrew Ng Coursera Neural Networks and Deep Learning John 易筋 ARTS 打卡 Week 58

John(易筋)

ARTS 打卡计划

亚信科技AntDB数据库与中科可控、海光公司完成产品兼容认证

亚信AntDB数据库

服务器 国产化 国产芯片 国产数据库 产品兼容性互认

在 Dubbo3.0 上服务治理的实践

阿里巴巴中间件

云计算 Serverless 云原生 dubbo 中间件

Camtasia添加弹题交互教程

淋雨

视频剪辑 Camtasia 录屏软件

真正决定你成败的,是时间管理!

博文视点Broadview

难以置信!一篇文章就梳理清楚了 Python OpenCV 的知识体系

梦想橡皮擦

8月日更

亏损、退市、卖身...区块链如何挽救影视行业?

旺链科技

区块链 版权保护 影视行业

ELK原来这么简单!《零基础(1)

Java 程序员 后端

【“互联网+”大赛华为云赛道】CloudIDE命题攻略:明确业务场景,快速开发插件

华为云开发者联盟

ide 开发 插件 华为云 CloudIDE

GitHub标星过万!10592字,475行

Java 程序员 后端

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

公众号_愿天堂没有BUG

2021 营销数字化的下一个站点

人称T客

时序数据库永远的难关 — 时间线膨胀(高基数 Cardinality)问题的解决方案

阿里巴巴中间件

云计算 阿里云 云原生 中间件 时序数据库

直播回顾 | 为什么在开发流程中应用静态代码分析工具?

鉴释

软件开发生命周期 在线研讨会 静态代码分析

关于测试的三个关键问题

QualityFocus

测试 质量 测试文化 测试落地

太可惜了,四面字节跳动,我的offer竟被一道“算法题”给拦截了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

香港服务器弹性是企业数字化转型的一个关键方面

九河云安全

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