Apache Flink 十大技术难点实战.pdf
《Apache Flink 十大技术难点实战.pdf》由会员分享,可在线阅读,更多相关《Apache Flink 十大技术难点实战.pdf(113页珍藏版)》请在咨信网上搜索。
1、102 万行代码,1270 个问题,Flink 新版发布了什么?4从开发到生产上线,如何确定集群规划大小?11Demo:基于 Flink SQL 构建流式应用 22Flink Checkpoint 问题排查实用指南 37如何分析及处理 Flink 反压?48Flink on YARN(上):一张图轻松掌握基础架构与启动流程 56Flink on YARN(下):常见问题与排查思路 64Apache Flink 与 Apache Hive 的集成 72Flink Batch SQL 1.10 实践 83如何在 PyFlink 1.10 中自定义 Python UDF?90Flink 1.10 N
2、ative Kubernetes 原理与实践 107目录102 万行代码,1270 个问题,Flink 新版发布了什么?作者:李钰(绝顶)|阿里巴巴高级技术专家导读:Apache Flink 是公认的新一代开源大数据计算引擎,可以支持流处理、批处理和机器学习等多种计算形态,也是 Apache 软件基金会和 GitHub 社区最为活跃的项目之一。2019 年 1 月,阿里巴巴实时计算团队宣布将经过双十一历练和集团内部业务打磨的 Blink 引擎进行开源并向 Apache Flink 贡献代码,此后的一年中,阿里巴巴实时计算团队与 Apache Flink 社区密切合作,持续推进 Flink 对
3、Blink 的整合。2 月 12 日,Apache Flink 1.10.0 正式发布,在 Flink 的第一个双位数版本中正式完成了 Blink 向 Flink 的合并。在此基础之上,Flink 1.10 版本在生产可用性、功能、性能上都有大幅提升。本文将详细为大家介绍该版本的重大变更与新增特性。Flink 1.10 是迄今为止规模最大的一次版本升级,除标志着 Blink 的合并完成外,还实现了 Flink 作业的整体性能及稳定性的显著优化、对原生 Kubernetes 的初步集成以及对 Python 支持(PyFlink)的重大优化等。综述Flink 1.10.0 版本一共有 218 名贡
4、献者,解决了 1270 个 JIRA issue,经由 2661 个 commit 总共提交了超过 102 万行代码,多项数据对比之前的几个版本都有所提升,印证着 Flink 开源社区的蓬勃发展。102 万行代码,1270 个问题,Flink 新版发布了什么?102 万行代码,1270 个问题,Flink 新版发布了什么?此外,我们还将 RocksDB state backend 使用的内存纳入了托管范畴,同时可以通过简单的配置来指定其能使用的内存上限和读写缓存比例(FLINK-7289)。如下图所示,在实际测试当中受控前后的内存使用差别非常明显。受控前的内存使用情况(share-slot)1
5、02 万行代码,1270 个问题,Flink 新版发布了什么?102 万行代码,1270 个问题,Flink 新版发布了什么?基于新调度框架的优化(FLINK-14735)在此基础上将 Flink 作为计算引擎访问 Hive 的 meta 和数据,在 TPC-DS 10T benchmark 下性能达到 Hive 3.0 的 7 倍以上。SQL DDL 增强Flink 1.10.0 支持在 SQL 建表语句中定义 watermark 和计算列,以 water-mark 为例:CREATE TABLEtable_name(WATERMARK FOR columnName AS)WITH(.)除此
6、之外,Flink 1.10.0 还在 SQL 中对临时函数/永久函数以及系统/目录函数进行了明确区分,并支持创建目录函数、临时函数以及临时系统函数:CREATE TEMPORARY|TEMPORARY SYSTEM FUNCTIONIF NOT EXISTS catalog_name.db_name.function_nameAS identifier LANGUAGE JAVA|SCALAPython UDF 支持Flink 从 1.9.0 版本开始增加了对 Python 的支持(PyFlink),但用户只能使用 102 万行代码,1270 个问题,Flink 新版发布了什么?102 万行代
7、码,1270 个问题,Flink 新版发布了什么?的资源管理器会主动和 Kubernetes 通信,按需申请 pod,从而可以在多租户环境中以较少的资源开销启动 Flink,使用起来也更加的方便。更多内容,参考 1.10.0 版本发布日志:https:/ci.apache.org/projects/flink/flink-docs-stable/release-notes/flink-1.10.html结语2019 年 1 月,阿里巴巴实时计算团队宣布 Blink 开源。整整一年之后,Flink 1.10.0 版本的发布宣告 Flink 和 Blink 的整合正式完成。我们践行着自己的诺言,开
8、放源码,更相信社区的力量,相信社区是开源协作精神与创新的摇篮。我们也衷心希望有更多的志同道合的小伙伴加入我们,一起把 Apache Flink 做的越来越好!从开发到生产上线,如何确定集群规划大小?作者:Robert Metzger翻译:毛家琦校对:秦江杰在 Flink 社区中,最常被问到的问题之一是:在从开发到生产上线的过程中如何确定集群的大小。这个问题的标准答案显然是“视情况而定”,但这并非一个有用的答案。本文概述了一系列的相关问题,通过回答这些问题,或许你能得出一些数字作为指导和参考。计算并建立一个基线第一步是仔细考虑应用程序的运维指标,以达到所需资源的基线。需要考虑的关键指标是:每秒记
9、录数和每条记录的大小 已有的不同键(key)的数量和每个键对应的状态大小 状态更新的次数和状态后端的访问模式最后,一个更实际的问题是与客户之间围绕停机时间、延迟和最大吞吐量的服务级别协议(sla),因为这些直接影响容量规划。接下来,根据预算,看看有什么可用的资源。例如:网络容量,同时把使用网络的外部服务也纳入考虑,如 Kafka、HDFS 等。磁盘带宽,如果您依赖于基于磁盘的状态后端,如 RocksDB(并考虑其他磁盘使用,如 Kafka 或 HDFS)可用的机器数量、CPU 和内存基于所有这些因素,现在可以为正常运行构建一个基线,外加一个资源缓冲量用于恢复追赶或处理负载尖峰。建议您在建立基线
10、时也考虑检查点期间(checkpoint-12从开发到生产上线,如何确定集群规划大小?ing)使用的资源情况。示例:数据说明当前在假设的集群上计划作业部署,将建立资源使用基线的过程可视化。这些数字是粗略的值,它们并不全面在文章的最后将进一步说明在进行计算过程中遗漏的部分。Flink 流计算作业和硬件示例Flink 流计算作业拓扑示例在本案例中,我将部署一个典型的 Flink 流处理作业,该作业使用 Flink 的 Kafka 数据消费者从 Kafka 消息源中读取数据。然后使用带键的总计窗口运算符(window operator)进行转换运算。窗口运算符在时间窗口 5 分钟执行聚合。由于总是有
11、新的数据,故将把窗口配置为 1 分钟的滑动窗口(sliding window)。这意味着将在每分钟更新过去 5 分钟的聚合量。流计算作业为每个用户 id 创建一个合计量。从 Kafka 消息源消费的每条消息大小(平均)为 2 kb。假设吞吐量为每秒 100 万条消息。要了解窗口运算符(window operator)的状态大小,需要知道不同键的数目。在本例中,键(keys)是用户 id 的数量,即 500000000 个不同的用户。对于每个用户,需要计算四个数字,存储为长整形(8字节)。从开发到生产上线,如何确定集群规划大小?从开发到生产上线,如何确定集群规划大小?默认情况下(如果所有运算符具
12、有相同的并行度并且没有特殊的调度限制),流作业的所有运算符都在每一台计算机上运行。在这种情况下,Kafka 源(或消息消费者)、窗口运算符和 Kafka 发送端(或消息生产者)都在这五台机器上运行。机器视角图-TaskManager n从上图来看,keyBy 是一个单独运算符,因此计算资源需求更容易。实际上,keyBy 是一个 API 构造,并转换为 Kafka source 和窗口运算符(window operator)之间连接的配置属性。以下将自上而下地分析(上图)这些运算符,了解他们的网络资源需求。The Kafka source要计算单个 Kafka 源(source)接收的数据量,我
13、们首先计算 Kafka 的合计输入。这些 source 每秒接收 1000000 条消息,每条消息大小为 2 KB。从开发到生产上线,如何确定集群规划大小?从开发到生产上线,如何确定集群规划大小?的角度进行的,这意味着某些数据已经在指定的目标机器运行了,因此减去 80 MB/s 即可:400 MB/s-80 MB=320 MB/s可以得到结果:每台机器以 320 MB/s 的速率接收和发送用户数据。The shuffle 的计算过程 Window 窗口输出和 Kafka 发送下一个要问的问题是窗口运算符发出多少数据并发送到 Kafka 接收器。答案是 67 MB/s,我们来解释一下我们是怎么得
14、到这个数字的。窗口运算符为每个键(key)保留 4 个数字(表示为长整形)的聚合值。运算符每分钟发出一次当前聚合总值。每个键从聚合中发出 2 个整形(user_id,window_ts)和 4 个长整形:(2 x 4 字节)+(4 x 8 字节)=每个键 40 字节然后将键的总数(500000000 除以机器数量)计算在内:100000000 个 keys x 40 个字节=4 GB(从每台机器来看)从开发到生产上线,如何确定集群规划大小?从开发到生产上线,如何确定集群规划大小?状态访问和检查点这不是全部的(内容)。到目前为止,我只查看了 Flink 正在处理的用户数据。在实际情况中需要计入从
15、磁盘访问的开销,包括到 RocksDB 的存储状态和检查点。要了解磁盘访问成本,请查看窗口运算符(window operator)如何访问状态。Kafka 源也保持一定的状态,但与窗口运算符相比,它可以忽略不计。要了解窗口运算符(window operator)的状态大小,需要从不同的角度进行查看。Flink 正在用 1 分钟的滑动窗口计算 5 分钟的窗口量。Flink 通过维护五个窗口来实现滑动窗口,每次滑动都对应一个 1 分钟的窗口。如前所述,当使用窗口实现即时聚合时,将为每个窗口中的每个键(key)维护 40 字节的状态。对于每个传入事件,首先需要从磁盘检索当前聚合值(读取 40 字节)
16、,更新聚合值,然后将新值写回(写入 40 字节)。窗口状态从开发到生产上线,如何确定集群规划大小?从开发到生产上线,如何确定集群规划大小?40 字节状态 x 5 个窗口 x 100000000 个 keys=20 GB并且,要获得每秒的值:20 GB 60=333 MB/秒与窗口运算类似,检查点是突发的,每分钟一次,它都试图将数据全速发送到外部存储器。Checkpointing 引发对 RocksDB 的额外状态访问(在本案例中,RocksDB 位于网络连接的磁盘上)。自 Flink 1.3 版本以来,RocksDB 状态后端支持增量 checkpoint,概念上通过仅发送自上一个 check
17、point 以来的变化量,减少了每个 checkpoint 上所需的网络传输,但本例中不使用此功能。这会将总数更新为:数据输入:760 MB/s(400+320+40)数据输出:760 MB/s(320+67+40+333)这意味着整个网络流量为:760+760 x 5+400+2335=10335 MB/秒400 是 5 台机器上 80 MB 状态访问(读写)进程的总和,2335 是集群上 Kafka 从开发到生产上线,如何确定集群规划大小?21输入和输出进程的总和。这大概是上图所示硬件设置中可用网络容量的一半以上。联网要求补充一点,这些计算都不包括协议开销,例如来自 Flink、Kafka
18、 或文件系统的 TCP、Ethernet 和 RPC 调用。但这仍然是一个很好的出发点,可以帮助您了解工作所需的硬件类型,以及性能指标。扩展方法基于以上分析,这个例子,在一个 5 节点集群的典型运行中,每台机器都需要处理 760 个 Mb/s 的数据,无论是输入还是输出,从 1250 Mb/s 的总容量来看,它保留了大约 40%的网络容量因为部分被主观所简化的复杂因素,例如网络协议开销、从检查点恢复事件重放期间的重载,以及由数据歪斜引起的跨集群的负载不平衡。对于 40%的净空是否合适,没有一个一刀切的答案,但是这个算法应该是一个很好的起点。尝试上面的计算,更换机器数量、键(keys)的数量或每
19、秒的消息数,选择要考虑的运维指标,然后将其与您的预算和运维因素相平衡。Demo:基于 Flink SQL 构建流式应用作者:伍翀(云邪)|Apache Flink PMC,阿里巴巴技术专家上周四在 Flink 中文社区钉钉群中直播分享了Demo:基于 Flink SQL 构建流式应用,直播内容偏向实战演示。这篇文章是对直播内容的一个总结,并且改善了部分内容,比如除 Flink 外其他组件全部采用 Docker Compose 安装,简化准备流程。读者也可以结合视频和本文一起学习。完整分享可以观看视频回顾:https:/ 1.10.0 于近期刚发布,释放了许多令人激动的新特性。尤其是 Flink
20、 SQL 模块,发展速度非常快,因此本文特意从实践的角度出发,带领大家一起探索使用 Flink SQL 如何快速构建流式应用。本文将基于 Kafka,MySQL,Elasticsearch,Kibana,使用 Flink SQL 构建一个电商用户行为的实时分析应用。本文所有的实战演练都将在 Flink SQL CLI 上执行,全程只涉及 SQL 纯文本,无需一行 Java/Scala 代码,无需安装 IDE。本实战演练的最终效果图:Demo:基于 Flink SQL 构建流式应用Demo:基于 Flink SQL 构建流式应用docker-compose.yml 中 datagen 的 spe
21、edup 参数来调整生成速率(重启 docker compose 才能生效)。MySQL:集成了 MySQL 5.7,以及预先创建好了类目表(category),预先填入了子类目与顶级类目的映射关系,后续作为维表使用。Kafka:主要用作数据源。DataGen 组件会自动将数据灌入这个容器中。Zookeeper:Kafka 容器依赖。Elasticsearch:主要存储 Flink SQL 产出的数据。Kibana:可视化 Elasticsearch 中的数据。在启动容器前,建议修改 Docker 的配置,将资源调整到 4GB 以及 4 核。启动所有的容器,只需要在 docker-compos
22、e.yml 所在目录下运行如下命令。docker-compose up-d该命令会以 detached 模式自动启动 Docker Compose 配置中定义的所有容器。你可以通过 docker ps 来观察上述的五个容器是否正常启动了。也可以访问 http:/localhost:5601/来查看 Kibana 是否运行正常。另外可以通过如下命令停止所有的容器:docker-compose down下载安装 Flink 本地集群我们推荐用户手动下载安装 Flink,而不是通过 Docker 自动启动 Flink。因为这样可以更直观地理解 Flink 的各个组件、依赖、和脚本。1.下载 Flin
23、k 1.10.0 安装包并解压(解压目录 flink-1.10.0):https:/www.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz 2.进入 flink-1.10.0 目录:cd flink-1.10.0 3.通过如下命令下载依赖 jar 包,并拷贝到 lib/目录下,也可手动下载和拷Demo:基于 Flink SQL 构建流式应用Demo:基于 Flink SQL 构建流式应用使用 DDL 创建 Kafka 表Datagen 容器在启动后会往 Kafka 的 user_behavior topic
24、中持续不断地写入数据。数据包含了 2017 年 11 月 27 日一天的用户行为(行为包括点击、购买、加购、喜欢),每一行表示一条用户行为,以 JSON 的格式由用户 ID、商品 ID、商品类目 ID、行为类型和时间组成。该原始数据集来自阿里云天池公开数据集,特此鸣谢。我们可以在 docker-compose.yml 所在目录下运行如下命令,查看 Kafka 集群中生成的前 10 条数据。Demo:基于 Flink SQL 构建流式应用Demo:基于 Flink SQL 构建流式应用 时间属性:https:/ci.apache.org/projects/flink/flink-docs-rel
25、ease-1.10/dev/table/streaming/time_attributes.html DDL:https:/ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/sql/create.html#create-table 在 SQL CLI 中成功创建 Kafka 表后,可以通过 show tables;和 describe user_behavior;来查看目前已注册的表,以及表的详细信息。我们也可以直接在 SQL CLI 中运行 SELECT*FROM user_behavior;预览下数据(按 q 退出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache Flink 十大技术难点实战 技术 难点 实战
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Stan****Shan】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Stan****Shan】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。