大家好,本文为 Flink Weekly 的第二十期,由蒋晓峰整理,程鹤群 Review。本期主要内容包括:近期社区开发进展、邮件问题答疑、Flink 最新社区动态及技术文章推荐以及五月 Flink 中文邮件列表活跃榜单公布。
Flink 开发进展
1.Release
■ [releases] Gordon 发布 Apache Flink Stateful Functions 2.1.0 版本,该发行版引入两个新功能:用于任何一种持久状态的状态到期,以及对 UNIX 域套接字(UDS)的支持,以提高位于同一位置的部署中容器间通信的性能;以及其他改善项目整体稳定性和可测试性的重要更改,有关详细信息请查看发布博客文章。
[1]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Apache-Flink-Stateful-Functions-2-1-0-released-td42345.html
[2]https://flink.apache.org/news/2020/06/09/release-statefun-2.1.0.html
2.Announce
■ [announce] 孙金城宣布李钰成为 Apache Flink PMC,李钰在 Flink 的 Statebackend 组件方面非常活跃,致力于各种改进例如针对1.10的 RocksDB 内存管理,并且持续发布版本的检查和投票,作为 Release Manager 成功发布两个版本(1.10.0&1.10.1)。恭喜李钰老师!
更多信息参考:
[3]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/ANNOUNCE-Yu-Li-is-now-part-of-the-Flink-PMC-td42567.html
3.Flip
■ [FLIP-127] Jacky Lau 发起支持 ElasticSearch Source Connector 的提案,目前 Flink ElasticSearch Connector 只支持 Sink 不支持 Source,很多公司具有读取 ElasticSearch 数据场景。ElasticSearch Source Connector 需要以下特性:
1.支持 ElasticSearch DataStream 和 SQL;
2.ElasticSearch 作为有界源并且支持查找联接;
3.支持 ElasticSearch 多个版本(5/6/7);
4.支持 FilterPushDown,ProjectPushDown 和 LimitPushDown 优化查询性能。
引入 ElasticsearchInputSplit 拆分 ElasticSearch 数据,使用 ElasticSearchInputFormatBase 读取 ElasticSearch 数据,实现 DynamicTableSource 以支持 SQL。
更多信息参考:
[5]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Discussion-flink-elasticsearch-connector-supports-tp42082p42238.html
[6]https://cwiki.apache.org/confluence/display/FLINK/FLIP-127%3A+Support+Elasticsearch+Source+Connector
4.Discuss
■ [documentation] Seth Wiesman 发起将 walkthroughs 迁移到1.11的 flink-playgrounds 的讨论,提议将支持 “walkthroughs” 的代码从主 flink 存储库移至 flink-playgrounds 存储库,建议从1.11版本中删除 Maven 原型,并且添加新的 docker 化的 playgrounds 以与 flink-playgrounds repo的文档一起使用。
[7]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Discuss-Migrate-walkthroughs-to-flink-playgrounds-for-1-11-td42360.html
■ [documentation] Robert Metzger 发起添加 flink.apache.org 网站日语翻译的讨论,表明似乎没有人审查这些贡献,并且在使英语和中文翻译保持同步方面存在几个问题,在添加另一种语言之前需要解决这些问题。
更多信息参考:
[8]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Add-Japanese-translation-of-the-flink-apache-org-website-td42279.html
■ [development process] Aljoscha Krettek 发起更新 EditorConfig 文件的讨论,提议将签入的 EditorConfig 更新为 Apache Flink 的当前代码和 CheckStyle 配置。
[9]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Update-our-EditorConfig-file-tp42409.html
邮件问题答疑
Xingxing Di 提问
:如何做 Checkpoint 的灾备?正在调研 Checkpoint 跨机房容灾的方案,目标是把 Checkpoint 备份到 HDFS2 上,当 HDFS1 故障时可以快速从 HDFS2 恢复 Flink 作业。
本来打算使用 Hadoop 的 distcp 命令定期把 HDFS1 上的 Checkpoint 备份到 HDFS2 上面,但是运维同学反馈 distcp 命令会报错,因为 Checkpoint 路径的文件变动太频繁。在这种文件频繁创建的场景下是如何做 HDFS 间的增量文件拷贝的,有没有现成的工具或成熟的方案?改造 Flink 代码支持 Checkpoint 异步双写是否为一个可行的方案?
邱从贤回答:
能否尝试定时的把文件先 Copy 到本集群,然后 Copy 后的文件通过 distcp 拷贝到其他集群。
另外改造 Flink 代码支持 Checkpoint 异步双写需要 TaskManager 端能够双写,参考现在开启 Local Recovery 的双写(本地和远程)的实现;JobManager 端需要考虑Checkpoint Meta 的格式以及存储,Meta 也需要存两份(如果只存一份的话,那么 HDFS
异常了也无法恢复),异常情况也需要仔细考虑;恢复的时候从哪个集群进行恢复。
整个过程中比较麻烦的是需要考虑各种异常情况如何解决。正常的流程来说,能找到 Checkpoint Meta 文件,Checkpoint 就是完整的。但是也可能会出现其他的一些异常(主要可能会有FileNotFound 等异常),那些异常如果需要提前知道的话,可以在 JobManager 端通过遍历 Checkpoint Meta 文件来进行判断。对于希望从 Checkpoint 恢复的场景来说,可以考虑下能否把 Checkpoint Meta 统一存储到某个地方,这样后续直接从这个地方读取即可。
唐云回答:
由于作业仍在运行,所以 Checkpoint 目录下的文件是不断新增以及删除的,其实在使用 distcp 的时候加上 “-i” 来忽略失败的拷贝(例如 FileNotFoundException)文件即可。因为作业的原始 Checkpoint 目录最终一定可以做到正常 restore,所以即使部分文件因为在拷贝时被原作业不需要而删除时,只要最终目录结构一致,是可以做到在另外一个 HDFS 上实现容灾备份的。
[10]http://apache-flink.147419.n8.nabble.com/checkpoint-td3861.html
Z-Z提问:
Flink 异常及重启容错处理? Flink 希望开发者怎么处理程序的异常?Checkpoint 是否可以转化为 Savepoint,使得没来得及 Savepoint 之前能够进行恢复?如果某条数据导致异常,怎么样才忽略这条数据而不影响应用的状态和运行?
唐云回答:
数据源中存在之前代码中没有很好处理的 corner case,导致在处理某一条“脏数据”时,作业进入 FAILED 状态。此时即使从之前的 Checkpoint 恢复,由于作业代码逻辑未变,之前的 corner case 依然无法处理,作业只能无限进去失败状态。
这种场景可以一开始时候将 Checkpoint 的保留策略设置成 RETAIN_ON_CANCELLATION,这样 cancel 作业之后,更改业务代码逻辑,从而可以处理之前的问题,再降作业上线从之前的 Checkpoint 恢复,这样做的话,数据是不会丢失的。
[11]http://apache-flink.147419.n8.nabble.com/Flink-td3726.html
zjfplayer 提问:
Flink on yarn 模式的代码运行位置问题?如何区分代码是运行在 Client/JobManager/TaskManager 里面?假设 jarA 中使用AbstractYarnClusterDescriptor.deployJobCluster() 替代 flink run 命令,部署 jarB 到 Yarn 上面,jarB 中 mainClass 使用 StreamExecutionEnvironment.execute 执行流任务,通过 java -cp jarA 方式启动,首先能确定的是 jarA 运行在服务器本地端,jarB 中 mainClass 是否已经运行在 Yarn 上还是运行在服务器端?
王阳回答:
Yarn perjob 模式,用户的 main 方法运行在 Client 端,编译生成 JobGraph 会 ship 到JobManager 进行任务的调度。
我理解用户的代码一般是不会在 JobManager 端运行的,JM 会将 task 调度到 TaskManager 上运行。对于 Yarn application 模式,用户 main 运行在 JobManager生成 JobGraph,其他相同。还是如上所说,取决于你是 deployJobCluster 还是 deployApplicationCluster,在1.11以前只有 deployJobCluster,也就是 mainClass 是在 Client 端运行(调用 deployJobCluster 的地方)。这个是预期内的,因为需要生成 JobGraph 之后再上传,也是为了解决这个问题引入 Application Mode。
[12]http://apache-flink.147419.n8.nabble.com/flink-on-yarn-td3846.html
活动 / 博客文章 / 其他
■ Flink Forward Global Virtual Conference 2020:在4月首次成功召开虚拟会议之后,Flink Forward将在10月19日至22日举办第二个免费虚拟版本。这次会议将进行为期两天的动手培训和为期两天的会议演讲!
[13]https://www.flink-forward.org/global-2020/call-for-presentations
■ Google Season of Docs 2020:在上一次更新中,我们宣布 Flink 今年再次申请 Google Docs(GSoD)。好消息:我们已入围已接受项目的清单!对于 Flink 社区而言,这是与技术作家合作以改善 Table API 和 SQL 文档的宝贵机会。我们很荣幸看到过去几周有很多人与我们联系,并希望从本周开始收到申请!
[14]https://flink.apache.org/news/2020/05/04/season-of-docs.html
■ 深入分析 Flink SQL 工作机制
[15]https://mp.weixin.qq.com/s/oIgVt9qTETfS6_9Srws_sw
■ 实时即未来?一个小微企业心中的流计算
[16]https://mp.weixin.qq.com/s/R4p_a2TWGpESBWr3pLtM2g
■ Flink 在快手实时多维分析场景的应用
[17]https://mp.weixin.qq.com/s/l08ovkcZjC7FylytFI82EA
■ 详解 Flink 实时应用的确定性
[18]https://mp.weixin.qq.com/s/5i7q_S7N4R2-jgq9tJqVNw
Apache Flink 中文邮件列表订阅流程:
发送任意邮件到 [email protected]
收到官方确认邮件
回复该邮件 confirm 即可订阅
订阅成功后将收到 Flink 官方的中文邮件列表的消息,您可以向 [email protected] 发邮件提问也可以帮助别人解答问题,动动手测试一下!
Flink Weekly 周报计划每周更新一期,内容涵盖邮件列表中用户问题的解答、社区开发和提议的进展、社区新闻以及其他活动、博客文章等,欢迎持续关注。
以上为 Flink 社区中文邮件列表活跃榜单 Top 10,掌声献给李本超,恭喜他成为本月社区贡献之星!也感谢大家对社区的热情,如果您对社区参与感兴趣,欢迎订阅中文邮件列表参与答疑或在社区提 issue、PR 等~
Tips:点击「阅读原文」查看本期 weekly 详情,扩展阅读链接可直接跳转~
关注 Flink 中文社区,获取更多技术干货
你在看」吗?