Flink 在 字节跳动
Posted 浪尖聊大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 在 字节跳动相关的知识,希望对你有一定的参考价值。
引入Apache Flink 的背景
Apache Flink 集群的构建过程
构建流式管理平台
近期规划
引入Apache Flink的背景
![Flink 在 字节跳动](https://image.cha138.com/20210413/7ce7386a6664420da2cabfdec953d8a3.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/f6efe483bfb2425ca755a1ac9f616f10.jpg)
第一个问题:单个 worker 没有内存限制,因此整个集群是没有内存隔离的。经常会出现单个作业内存使用过高,将整台机器的内存占满。
第二个问题:业务团队之间没有 Quota 管理,平台做预算和审核是无头绪的。当时几乎大部分业务方都跑在一个大集群上面,资源不足时,无法区分出来哪些作业优先级高,哪些作业优先级低。
第三个问题:集群过多,运维工具平台化做得不太好,都是靠脚本来运维的。
第四个问题:业务方普遍使用 python,某些情况下性能有些差。其次由于平台针对 Java Jstorm 的一些 Debug 工具,SDK 较弱,故推广 Java Jstorm 作业较难。
![Flink 在 字节跳动](https://image.cha138.com/20210413/0d5f0e593f0847a78fd2dbd9a2e765b3.jpg)
Flink 集群的构建过程
![Flink 在 字节跳动](https://image.cha138.com/20210413/987477a21a8c42cd99741ac0e4162fbc.jpg)
Jstorm->Flink 作业迁移
在迁移过程中,开始着手构建了一个流式管理平台。这个平台和其他管理平台是一样的,主要提供作业配置管理,版本管理,监控,重启,回滚,Debug 功能,操作记录等功能。
不同的是,我们在架构上分两层实现的,上面一层是面向用户端的产品,称作大禹(取自大禹治水);下面一层是用来执行具体和 Yarn,Flink 交互的工作,称作 TSS(Toutiao Streaming Service)。这样的好处是,未来有一些产品也可以构造自己面向用户端的产品,这样他直接对接 TSS 层就可以了。下面给大家介绍一下,在字节跳动实现一个流式作业的流程。
创建一个作业模板,使用 maven 提供的脚手架创建一个任务模板,重要内容是 pom.xml 文件。生成的作业模板 pom.xml 已经将 Flink lib 下面的 Jar 包都 exclude 掉了,降低版本冲突的可能性。
写完作业之后,可以测试作业。可以支持本地测试,也可以提交到 stage 环境测试。
测试完成后,需要在 dayu 平台上注册作业,添加一些配置信息。
将自己 git 上的代码,打包,升级到最新版本,在 dayu 页面上选择版本信息,方便回滚。
提交完作业后,用户需要查看作业运行的状态怎么样,提供四种方式供用户查看作业状态
第一个是 Flink UI,也就是官方自带的 UI,用户可以去看。第二个是 Dashboard,展示作业 task qps 和 latency 以及 task 之间的网络 buffer,将这些重要信息汇总到一个页面,追查问题时清晰明了。
第三个是错误日志,将作业的错误日志都收集在一起,写入到 ES 上,方便用户查看。
第四个是 Jobtrace 工具,就是把 Flink 框架层面产生的异常日志匹配出来,直接判断故障,告知用户处理方法。例如当作业 OOM 了,则告知用户如何扩大内存。
五、近期规划最后跟大家分享一下近期规划
用户资源配置是否合理,一直是用户比较头疼的一件事,因此希望能够根据该作业的历史表现,告知用户合理的资源配置信息。
Flink 1.3 -> 1.5 版本升级
优化作业重启速度,缩短用户重启作业数据流中断时间。
Flink SQL 平台刚上线,需要投入一些精力去了解 SQL 工作机制。以上就是我本次分享的主要内容,感谢 Flink 的举办者和参与者,感谢我的同事,因为以上的分享内容是我和同事一起完成的。
构建流式管理平台
![Flink 在 字节跳动](https://image.cha138.com/20210413/a257f605ba3943f48f6464c0c93d01d6.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/e6cbc507d146447c8e55e54d063e01ef.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/5556f2313f104019acff1f95e10f8a8c.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/83b2fcd72c3b487d818b0d269a8e4032.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/d88b7392a694469ba08d2a0c422a8c58.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/32afa722ede34393acabd6a28ff68b51.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/9f9a7d9370eb4648b064ceb48194f54a.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/fc31e70522ac4e5cb97ef1f7e782b9ac.jpg)
![Flink 在 字节跳动](https://image.cha138.com/20210413/8040e68edeab46b6b34e4c521f4bfded.jpg)
用户资源配置是否合理,一直是用户比较头疼的一件事,因此希望能够根据该作业的历史表现,告知用户合理的资源配置信息。
Flink 1.3 -> 1.5 版本升级
优化作业重启速度,缩短用户重启作业数据流中断时间。
Flink SQL 平台刚上线,需要投入一些精力去了解 SQL 工作机制。以上就是我本次分享的主要内容,感谢 Flink 的举办者和参与者,感谢我的同事,因为以上的分享内容是我和同事一起完成的。
以上是关于Flink 在 字节跳动的主要内容,如果未能解决你的问题,请参考以下文章
字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化
字节跳动Jstorm 到Apache Flink 的迁移实践
Flink如何取代JStorm,成为字节跳动流处理唯一标准?