大家好,本文为 Flink Weekly 的第二十三期,由蒋晓峰、李本超独特整顿及 Review。本期次要内容包含:近期社区开发进展、邮件问题答疑、Flink 最新社区动静及技术文章举荐等。
Flink 开发进展
Flink 社区近期开发最新动静将从 Release、DEV、FLIP、Discuss、Others 五局部跟大家分享。
RELEASE
■ 1.11.1 版本的投票曾经通过,行将公布。该版本涵盖了比拟多重要的 Bugfix,倡议尝试 1.11.0 版本的用户都间接切换到这个版本。
[1]http://apache-flink-mailing-l…
DEV
■ Chenqin 发动了反对 Thrift Format 的探讨,目前看该个性还是比拟受欢迎的,而且的确有些场景是须要的。之前也有一个相干的 PR[3],社区心愿能够基于这个 PR 来持续推动一下这个工作。
[2]http://apache-flink-mailing-l…[3] https://github.com/apache/fli…
FLIP
■ [FLIP-128] 伍翀发动 Refactor Descriptor API to register connectors in Table API 的提案,改良 Table API 中的“Connect API”,即用户用来在环境中形容 / 注册表的 API。
自 1.5.0 起 Flink 引入 Descriptor API 来配置和有效化 TableSources/TableSinks,即 TableEnvironment#connect API。以后的 Descriptor API 有诸多问题包含社区关注最新版本中的新 SQL DDL 性能。SQL DDL 通过精心设计具备许多丰盛的性能,然而 Descriptor API 短少许多要害性能例如计算列、主键、分区键等;以后连接器必须实现相应的描述符(例如 new Kafka())能力应用“connect”API,心愿在没有相应描述符的状况下注册连接器,简化连接器的开发并且代替 registerTableSource/Sink;Descriptor API 和 SQL DDL 的根底实现不同,保护两个不同的代码门路十分低廉。
提案倡议删除现有办法 TableEnvironment#connect(在 1.11 中弃用)和一些相干的接口 / 类,为表 API 引入一组新的 Descriptor API:TableEnvironment#createTemporaryTable()。
更多信息参考:
[4]http://apache-flink-mailing-l…
[5]https://cwiki.apache.org/conf…
■ [FLIP-129] 陈水强发动反对 Python DataStream API (Stateless part) 的提案,与 Python Table API 相似形式引入 Python DataStream API,倡议最后只反对无状态的用户定义性能。
以后 PyFlink 反对 SQL 和 Table API 为相熟 Python 编程语言的用户提供便当,然而用户可能要求进行更简单的解决操作譬如可能须要拜访状态和计时器等。引入 DataStream API 反对 Python DataStream 从内部存储(连接器)读取 / 写入数据,反对配置工作和作业配置(获取 / 设置资源、并行性、链接策略等),反对无状态数据转换,包含 map、flatmap、keyby 等。
更多信息参考:
[6]http://apache-flink-mailing-l…
[7]https://cwiki.apache.org/conf…
Discuss
■ [releases] 伍翀发动在 Flink 1.11.0 之后不久公布 Flink 1.11.1 的探讨,以提供残缺的 CDC 性能和解决大多数在 Table API / SQL 生态系统发现的重要谬误问题,提议不要期待太久收集 / 修复谬误否则再次提早性能交付,倡议于下周一创立第一个 RC,以梳理分明 Thomas 之前报告的性能降落。
更多信息参考:
[8]http://apache-flink-mailing-l…
Others
■ [announce] Stephan Ewen 发表 Piotr Nowojski 成为 Apache Flink PMC,Piotr 善于数据处理运行时和网络堆栈畛域,以及邮件列表或者版本公布管理者的工作。祝贺 Piotr Nowojski 老师!
更多信息参考:
[9]http://apache-flink-mailing-l…
■ [FLINK-18419] [1.11.0] 用户无奈应用 Jar 文件的代码创立一个 Catalog,例如通过 sql-client 上传的 Jar 包,将在 1.11.1 版本修复。
[10]https://issues.apache.org/jir…
■ [FLINK-18583] [1.11.0] ElasticSearch Sink 索引中设置不正确的 _id 字段,将在 1.11.1 版本修复。
[11]https://issues.apache.org/jir…
■ [FLINK-18583] [1.11.1] InfluxDB metrics reporter 不能作为插件应用,将在 1.11.1 版本修复。
[12]https://issues.apache.org/jir…
■ [FLINK-18434 [1.10.0] 在应用 JDBC Catalog 时候无奈 Select 字段,将在 1.11.1 版本修复。
[13]https://issues.apache.org/jir…
■ [FLINK-18461] [1.11.0] 以后不反对往 upsert sink 中写 ChangeLog 流(例如,Elastic 或者 JDBC),将在 1.11.1 版本修复。
[14]https://issues.apache.org/jir…
邮件问题答疑
■ [SQL] Dongwon Kim 发问 Flink SQL 是否反对 PARTITION BY 的时候用嵌套字段。
当初应该是不反对的。然而能够用计算列来绕过去这个问题,以后的 Filesystem Connector 对于计算列的反对有个 Bug[FLINK-18665],详情理解:
[15]http://apache-flink-user-mail…
■ [SQL] Kelly Smith 发问如何把 Filesystem 当做维表应用。
以后有几个问题,首先一般的 Join 语法不容许数据中有工夫属性,这个接下来能够在 Planner 层做一个优化 [FLINK-18651],主动在这种状况下将工夫属性物化为一般的工夫字段;其次以后的 Filesystem 还不反对维表拜访,这个将来也能够反对 [FLINK-17397]。
[16]http://apache-flink-user-mail…
■ [SQL] sunfulin 发问如何在 1.11 中应用 DML Sink 和 toDataStream 之后 addSink 放弃在同一个 job 中。
Godfrey 进行了答复,在 1.11 中重构了 TableEnvironment 的接口,目前没有方法能够做到对立这两个形式到同一个 job 中,只能造成两个不同的 job。
[17]http://apache-flink.147419.n8…
■ [SQL] 曹武 发问应用 debezium-json 做数据同步时会有 Delete 数据被抛弃的问题。
这里有两个问题,一个是如果用了聚合算子,它的 Delete 数据如果没有对应的 Insert 数据,应该会被当做脏数据抛弃;第二个问题是一个已知的 Bug[FLINK-18461],这个会在 1.11.1 中修复。
[18]http://apache-flink.147419.n8…
■ [SQL] claylink 发问如何用 Flink SQL 解析最外层为 Array 的数据,并且增加计算列。
李本超进行了答复,以后还不能做到这一点,不过 FLINK-18590 正在跟进解决这个问题。
[19]http://apache-flink.147419.n8…
■ [SQL] wanglei2 发问 Flink SQL 是如何加载到某个具体的 connector/format 的。
godfrey、Leonard、云邪等进行了答复。首先是通过 SPI 机制找到所有实现了特定接口的工厂类,而后通过每个 connector/format 工厂给进去的参数来筛选符合条件的,最终定位到具体的实现代码。
[20]http://apache-flink.147419.n8…
■ [SQL] Dream- 底限 发问如何在用 Flink SQL 解析 json 失败的时候,把这些脏数据发送到某个特定的 topic。
云邪答复了该问题,这种需要比拟非凡,从 Flink 侧来间接反对不是很容易,因为要形象一层存储对接到各种存储系统上,而不是单纯的假如肯定是 Kafka。以后倡议是能够由 Flink 来输入这个脏数据到日志,而后用户本人定义一些 Log Appender 来收集这些数据。
[21]http://apache-flink.147419.n8…
■ [sql-client] wldd 发问:Flink 1.11.0 读取 MySQL 数据 DECIMAL 类型强转成 DECIMAL(38,18) 问题:通过 SQL Client 读取 MySQL 数据时 DECIMAL 类型强转成 DECIMAL(38,18),Streaming 模式下呈现:
For final plan, using rel#3045:LogicalProject.NONE.any.None: 0.[NONE].[NONE](input=HepRelVertex#3044,exprs=[CAST($0):DECIMAL(38, 18)])
徐榜江答复:SQL Client 读取 MySQL 相当于一个 Connector 只反对 DECIMAL(38,18) 的,所有 DECIMAL(p,s) 都会转到这个类型,因为 SQL Client 用的是 Legacy 数据类型。Stream 模式有这个问题,Batch 没有,起因是:
- CollectStreamTableSink 实现的是 TupleTypeInfo<Tuple2<Boolean, Row>> getOutputType()
- CollectBatchTableSink 实现的是 DataType getConsumedDataType()
社区有 Issue [22] 彻底解决这个问题,贺小令提 Pull Request 把此两个 CollectSink 都去掉,应用 TableResult#collect() 来收集数据。
更多信息参考:
[22]https://issues.apache.org/jir…[23]http://apache-flink.147419.n8…
■ [SQL] Peihui He 发问:Flink 1.10 SQL Kafka Format JSON 定制 Schema 时, 字段数据是否定义为 JSON Object?
李本超答复:社区有 Issue[24] 正在解决此问题,指定任意一个 JsonNode 为 VARCHAR 类型。
此 Feature 不能解决所有问题,比方有一个字段内容不太确定而且也不须要额定解决,次要是想保留这个字段,上游输入 JSON 时依然还是此字段。沿着用 FLINK-18002 的思路输入到上游的时候,把这部分数据整体作为 JSON 字符串,从后果上来看未能齐全做到一成不变的输入到上游。有两个思路解决此问题:
- 用 RAW 类型,此时须要 JSON Node 类型对于 Flink 来讲都是能够序列化的。
- 用 BINARY 类型,因为当初曾经有对 BINARY 类型的解决,所以须要额定加一个选项来指定对于 BINARY 类型的解决模式,把任意 JsonNode 转成 JSON 字符串表达形式,再转成 byte[] 进行两头的传输和解决;序列化时再间接通过此 byte[] 数据结构 JsonNode,保障跟原来的 JsonNode 截然不同。
更多信息参考:
[24]https://issues.apache.org/jir…
[25]http://apache-flink.147419.n8…
■ [Sink] xueaohui 问:Flink 多 Sink 数据一致性保障即通过把作业退出多个 Sink,这种场景当 HBase 写入失败的时候不影响 Kafka 的写入。冀望 HBase 写入失败,Kafka 也不发送音讯,如何保障 HBase 和 Kafka 的写入为原子性呢?
高赟答复:多个 Sink 的状况下数据保障写入依然产生在数据写入后的 Checkpoint 实现,如果写入 HBase 失败的时候触发 Failover 的话,按二阶段提交的逻辑这种状况下 Kafka 的事务被 Abort 掉,数据不会真正写入。多个 Sink 如果依照 TwoPhaseCommitSinkFunction 来做的话是可能实现多 Sink 一致性的,只有有一个 Sink 出错整个作业都会 Failover,其它 Sink 以后的事务也会跟着 Abort 掉,而后整个作业回退到上一次 Checkpoint 开始执行。
社区正在加 Exactly-Once JDBC Sink 实现 [26]。如果要实现两阶段提交的 Sink 的话,总是须要有能跨 Session 的 Transaction 机制,即在作业挂了之后下次起来的时候此事务可能 Abort 掉或者持续提交(取决于是否曾经 Snapshot),例如 JDBC 必须要用 XA 事务,用单纯的 JDBC 事务应该是有问题的,因为即便在 Snapshot 的时候 Precommit 过,如果作业挂掉连贯中断此事务依然会被 Abort 掉。
更多信息参考:
[26]https://issues.apache.org/jir…
[27]http://apache-flink.147419.n8…
流动 / 博客文章 / 其余
■ 2020 Apache Flink 首场线下 Meetup 正式启动,阵容非常可观,详情理解:
[28]https://www.huodongxing.com/g…
■ 工作部署的原理以及新引入的 Application Mode 介绍
[29]https://flink.apache.org/news…
■ 字节跳动基于 Flink 的 MQ-Hive 实时数据集成
[30]https://mp.weixin.qq.com/s/SD…
■ 网易云音乐实时数仓建设实际
[31]https://mp.weixin.qq.com/s/n4…
■ Alexander Fedulov 介绍无关 Apache Flink 的介绍性视频系列以及 YouTube 上的流解决。更多信息参考:
[32]https://www.ververica.com/blo…
[33]https://www.youtube.com/watch…
2 分钟疾速订阅 Flink 中文邮件列表
Apache Flink 中文邮件列表订阅流程:
- 发送任意邮件到 user-zh-subscribe@flink.apache.org
- 收到官网确认邮件
- 回复该邮件 confirm 即可订阅
订阅胜利后将收到 Flink 官网的中文邮件列表的音讯,您能够向 user-zh@flink.apache.org 发邮件发问也能够帮忙他人解答问题,动动手测试一下!
Flink Weekly 周报打算每周更新一期,内容涵盖邮件列表中用户问题的解答、社区开发和提议的停顿、社区新闻以及其余流动、博客文章等,欢送继续关注。