Flink Weekly | 每周社区动态更新
大家好,本文为 Flink Weekly 的第十四期,由李本超整理,伍翀 Review。本期主要内容包括:近期社区开发进展、邮件问题答疑、Flink 最新社区动态及技术文章推荐等。
Flink 开发进展
1.Release
■ Dian Fu 宣布 1.9.3 发布。
■ Yu Li 发起了 1.10.1 RC1 的投票。
■ Piotr Nowojski 和 Zhijiang 同步了一下 1.11 的开发进度。
2.FLIP
■ [table api] Xuannan Su 发起了 “FLIP-36 - 在 Flink Table API 中支持交互式编程” 的讨论,Becket Qin 反馈了一些意见并进行了讨论。
■ [table api] Dawid 发起了 FLIP-124 的投票,FLIP-124 旨在增强(反)序列化接口,增加 open/close 接口、支持返回多条数据等,投票已经通过。
■ [table api] Aljoscha 发起了 FLIP-126 的讨论,旨在简化 watermark 生成的逻辑,减少代码重复,并且能够做到 per partition 的 idle 检测。Timo 认为这是个比较有用的 feature。
■ [runtime] Yangze Guo 宣布 FLIP-118 投票通过,FLIP-118 旨在提升 Flink 内部的 ID 的可读性。
3.Discuss
■ [doc] David Anderson 发起了将 http://training.ververica.com 的一些培训材料贡献到 Flink 社区的讨论,讨论通过,并且会将这些培训材料放到 https://github.com/apache/flink-training,并且在 Jira 中新建了一个“Documentation / Training”的 component。
■ [SQL] Konstantin 发起了用 DDL 支持定义 Temporal Table Function 的讨论,大家比较认可这个需求,但是对于具体支持的方式发起了讨论,暂时还没有完全确定用哪种 DDL 方式来做。
■ [develop] Stephan Ewen 发起了将 1.11 Feature Freeze 的时间延长半个月的讨论,大家都比较赞成,目前定于 5 月中旬为最终 Feature Freeze 的时间。
■ [state] Stephan Ewen 发起了删除 state 中过时的方法的讨论,大家也都比较赞成,会在 1.11 中删除 state 中标记为过时的那些方法。
■ [docker] Chesnay Schepler 发起了将 docker 的开发放到每个 Flink 版本的发布的讨论,David 认为可以这样做:
■ [runtime] Robert Metzger 发起了支持 Hadoop 3 以及删除 flink-shaded-hadoop 的讨论,大家比较支持这个提议,但是提出了一些潜在的问题,并进行了讨论。
■ [docker] Ismaël Mejía 发起了是否可以在 Flink 正式 release 之外发布 docker 镜像的讨论,Chesnay Schepler 认为可以发布,但是每次发布都需要有一个正式的发布流程。
■ [develop] Yangze Guo 发起了关于带有 max/min 的配置的名字的讨论,目前多数人倾向于使用 XXX.max/XXX.min 这种形式。
4.Other
■ [annonce] Hequn Cheng 成为 Flink PMC 成员。恭喜军长~
邮件问题答疑
■ Matyas 提问:如何在 query 或者 view 上定义 watermark。Jark 回答了他的问题,可以使用在 1.11 中的 LIKE 语法来在已有的 Table 上添加 watermark 定义;也可以用 Table API 将 Table 转成 DataStream,然后用 assignTimestampAndWatermark 来重新定义 watermark。
■ Lasse Nedergaard 提问:升级到 1.10 之后容易出现 OOM 的问题。Xintong 和 Stephan 进行了解答,可能是因为 native memory 使用的比较多导致的。Zhhid Rahman 也帮忙回答了一下问题,贴了一下 Youtube 链接的视频,但是 Stephan 不是很建议这样子来帮助用户解决问题。
■ Oleg Vysotsky 提问:为什么时候 Kafka Source 的 checkpoint size 会到55GB。Yun Tang 对问题进行了解答,最后定位是因为用户在切换 Kafka 和 Kinesis Source 的时候,用了同一个 UUID,导致 Source Operator 的 state 变大,只要是在切换 Source 的时候用不同的 UUID,就不会出现这个问题。
■ Utopia 提问:关于日志里汇报”类构造器没有默认的构造函数,所以不能用作 POJO 类型,只能用 GenericType 来处理”的信息。他用的是 Scala 的 case class。Timo 进行了解答,他应该是在 Java API 中使用了 Scala 的 case class,如果是用 Scala API 就不应该会有这个问题。
■ Eyal Peer 提问:在使用 StreamingFileSink+local filesystem 的时候,在任务重启的时候无法恢复的问题。Dawid 进行了解答,认为这是一种不正确的使用方式,这个是没法做到真正的 Exactly-Once 的,因为 Flink 重启的时候任务不会保证调度到之前同样的 slot 里,所以没法恢复。需要使用分布式文件系统,例如 HDFS 等。
■ Lu Niu 提问:checkpoint 写入 S3AFileSystem 文件系统的时候报错。Congxian 和 Robert 认为这个应该是文件系统本身的问题,不是 Flink 的问题。并且认为 presto s3 filesystem 是比较推荐的方式,并且建了一个 Jira 来跟踪 StreamingFileSink 支持 presto s3 filesystem。
■ Vinay Patil 提问:如何避免两个流 Join 的时候发出重复的结果。Konstantin 认为他可以使用 Temporal Table Function 的方式来做 Join,这样可以避免重复输出的问题,但是如果用的是事件时间,并且一个流的输入很低频,会导致 watermark 前进的慢,输出有很大的延迟。用户最后选择自己用 DataStream API 自己去实现这个功能了。
■ Flavio 提问:是否有方法可以用参数来指定读取 jdbc 的时候的并行读取方式。Jingsong 对此进行了回复并进行了讨论,认为这是个合理的场景,filter 下推跟这个需求并不冲突,filter 下推只能降低从 source 读取的数据量,但是没法定制并行读取的方法。Flavio 建了三个 Jira issue 来跟踪这个问题。
■ Benchao Li 提问:是否有计划支持 batch range sort 的计划,Jingsong 进行了回答。目前还缺少比较明确的应用场景来推动这个 feature 的落地。暂时先建了 Jira issue 来跟踪这件事。
■ liujianggang 提问:使用 UDAF 的时候遇到 checkpoint 的时候会有序列化的问题。这个问题是由于在 serializer.duplicate 中有 bug 导致的,已经在 FLINK-16242 中修复。
■ seeksst 提问:升级到 1.10 后 JSON_VALUE 函数不能注册的问题,Jark 和 Danny 进行了回答,是因为在 Calcite 中 JSON_VALUE 是直接 hard code 在 parser 中的,用户是无法注册一个同名函数来覆盖掉的,这个已经由 Danny 在 Calcite 社区去 push 解决了。
■ Gyula 提问:为什么 Kafka Join Hive 的时候为什么不能保留 Kafka 流的时间属性。Kurt 和 Timo 对此进行了回答,因为现在还没有办法在 streaming 模式下区分一个 source 是否是 bounded,而且 join 的时候可能会有 join 到一个比较老的数据的情况,所以当前不能有时间属性参与 regular join。
■ dingxingxing 提问:为什么两层 group by 的时候,输出的结果会忽大忽小。Benchao Li 对此进行了回答,因为 group by 会输出 retract 结果,所以如果是两层的话,就会导致下游的 group by 会放大这个 retract 的影响,导致会短暂输出老的结果。Jark 认为可以用 mini batch 来缓解一下这个问题。
■ lec ssmi 提问:关于 Flink SQL 中的 retract 机制,Benchao Li 对 retract 机制进行了解答。当前官方文档中的确是缺少这块内容的介绍,已经创建了一个 Jira issue FLINK-17343 来跟踪这个事情。
[30]http://apache-flink.147419.n8.nabble.com/retract-td2672.html
■ 宇张提问:为什么找不到正确的 SourceTableFactory,Jingsong 和 tison 进行了解答,原因是现在 TableFactory 是采用 SPI 加载的,这就涉及到用户在打包的时候,是否把正确的 SPI 配置文件打包、是否处理好了多个 TableFactory 的时候的冲突问题。这个一般在打 shade 包的时候,需要特殊配置一下 shade 插件,使用起来不是特别友好。
[31]http://apache-flink.147419.n8.nabble.com/Flink1-10-Standalone-td2650.html
■ 酷酷的混蛋提问:关于 Flink SQL 中的 state 的 TTL 的处理的原理,Benchao Li 进行了解答。在之前的确是有些设置不合理,首先在 1.9.3 之前没有开启 state 的 background 清理,可能会导致有些 state 到期了仍然没有被清理,这个会在 1.9.3 以及 1.10 以后可以解决;第二个问题是之前使用的过期策略是允许读到过期但是没有清理的数据,这个行为会在 1.11 中修改成不允许读到过期的数据的策略。
[32]http://apache-flink.147419.n8.nabble.com/TTL-td2482.html
活动 / 博客文章 / 其他
■ 1.10 中内存管理的改进
[33]https://flink.apache.org/news/2020/04/21/memory-management-improvements-flink-1.10.html
■ Flink 序列化调优(一):如何选择 Serializer
[34]https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html
■ Stateful Functions 在有状态的无服务应用中的使用
■ Adobe 基于Flink实现实时身份图谱
[36]https://www.ververica.com/blog/adobe-realtime-identity-graph-with-flink
■ Flink 消息聚合处理方案-微博
[37]https://ververica.cn/corporate_practice/flink-message-aggregation-processing-scheme/
2 分钟快速订阅 Flink 中文邮件列表
Apache Flink 中文邮件列表订阅流程:
发送任意邮件到 user-zh-subscribe@flink.apache.org
收到官方确认邮件
回复该邮件 confirm 即可订阅
订阅成功后将收到 Flink 官方的中文邮件列表的消息,您可以向 user-zh@flink.apache.org 发邮件提问也可以帮助别人解答问题,动动手测试一下!
Tips:点击「阅读原文」查看本期 weekly 详情,扩展阅读链接可直接跳转~
Flink Weekly 周报计划每周更新一期,内容涵盖邮件列表中用户问题的解答、社区开发和提议的进展、社区新闻以及其他活动、博客文章等,欢迎持续关注。
作者介绍:
李本超,硕士毕业于北京大学,现就职于字节跳动基础架构流式计算工程师。
# 社区活动推荐 #
Flink Forward 全球在线会议中文精华版 PPT 下载及直播回顾观看:
微信公众号 关注 Flink 中文社区,获取更多技术干
评论