首页 > 代码库 > Apache Flink 1.3.0正式发布及其新功能介绍
Apache Flink 1.3.0正式发布及其新功能介绍
下面文档是今天早上翻译的,因为要上班,时间比较仓促,有些部分没有翻译,请见谅。
2017年06月01日儿童节 Apache Flink 社区正式发布了 1.3.0 版本。此版本经历了四个月的开发,共解决了680个issues。Apache Flink 1.3.0 是 1.x.y 版本线上的第四个主要版本,其 API 和其他 1.x.y 使用 @Public 注释的API是兼容的。
此外,Apache Flink 社区目前制定了每四月发行一个主要版本(Apache Flink 1.2.0 是2017-02发行的,和 1.3.0正好隔了四个月),所以我们可以预期 Apache Flink 1.4.0 大约会在十月份发布。
主要的更新如下
Large State Handling/Recovery
-
RocksDB的增量检查点(Incremental Checkpointing for RocksDB):现在支持仅保存与上一次成功checkpoint之后新增的数据,而不是保存所有的应用程序状态。这将会加快checkpoint的时间,并且会相应地减少磁盘空间的消耗,因为每个checkpoint的大小会更小。详情请参见FLINK-5053。
-
基于堆状态后端的异步快照(Asynchronous snapshotting):现在文件后端和内存后端(backends)使用写时复制HashMap的实现,使得其支持异步快照。异步快照使得Flink堆缓慢的存储系统和昂贵的序列化具有更大的弹性。详情请参见FLINK-6048, FLINK-5715。
-
允许升级状态的Serializer:现在我们可以保存应用程序状态的前提下升级状态的Serializer。
-
以算子的粒度恢复作业状态:在Apache Flink 1.3.0之前,算子的状态是绑定在task内部的,这使得很难在保持作业状态的同时改变job的拓扑。而现在我们可以做很多关于拓扑的修改。详情参见FLINK-5892。
-
细粒度恢复(beta):在task出现故障的时候,我们可以仅仅重启那些受影响的subgraph,而不需要重启整个ExecutionGraph,这将大大减少恢复时间,详情参见FLINK-4256。
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
DataStream API
-
Side Outputs:这个功能使得一个算子可以有多个output stream。算子的元数据、内部系统信息(调试,性能等)或者是拒绝\延迟的数据将会是这个功能的潜在用例。Window算子现在使用这个功能来处理延迟的数据。参见FLINK-4460。
-
Union Operator State:Flink 1.2.0引入了广播状态功能(broadcast state functionality),但是这个功能并没有对外开放。Flink 1.3.0 提供了Union Operator State API来对外开放广播状态功能。详情参见FLINK-5991。
-
针对每个窗口的状态:在此之前,WindowFunction或ProcessWindowFunction可以访问的状态被限定到窗口的key,而不是窗口本身。有了这个新功能,用户可以保持窗口状态并且与key无关。参见FLINK-5929。
Deployment and Tooling
-
Flink历史服务器:Flink的HistoryServer现在允许您查询JobManager归档的已完成作业的状态和统计信息,详情参见FLINK-1579。
-
在WEB前端监控Watermark:为了更容易地诊断watermark相关问题,Flink JobManager前端现在提供了一个新的选项卡来跟踪每个算子的watermark。详情参见FLINK-3427。
-
Datadog HTTP Metrics Reporter: Datadog是使用非常广泛的指标系统。Flink现在提供了一个Datadog reporter,直接与Datadog http端点联系。详情参见FLINK-6013。
-
网络缓存配置:我们终于摆脱了繁琐的网络缓冲区配置,并用更通用的方法替代了它。现在我们使用可用JVM 内存的部分(默认是10%),而不是定义绝对数量的网络缓冲区。
Table API / SQL
-
Support for Retractions in Table API / SQL: As part of our endeavor to support continuous queries on Dynamic Tables, Retraction is an important building block that will enable a whole range of new applications which require updating previously-emitted results. Examples for such use cases are computation of early results for long-running windows, updates due to late arriving data, or maintaining constantly changing results similar to materialized views in relational database systems. Flink 1.3.0 supports retraction for non-windowed aggregates. Results with updates can be either converted into a DataStream or materialized to external data stores using TableSinks with upsert or retraction support.
-
Table API / SQL支持更多的聚合: Flink 1.3.0中Table API 和 SQL 支持更多类型的聚合, 包括
-
Batch 和 Streaming SQL 都支持GROUP BY window聚合操作(通过window函数TUMBLE, HOP, and SESSION windows
-
SQL OVER window aggregations (only for streaming)
-
Non-windowed aggregations (in streaming with retractions).
-
用户自定义的聚合函数
-
支持外部的catalog: Table API 和 SQL 允许注册外部的catalogs. Table API 和 SQL 可以通过外部的catalogs 查询表及其模式相关的信息,而不需要对使用的表一一注册。
目前Table API / SQL的文档被重写了,预计会在06月05日发布。
Connectors
-
支持ElasticSearch 5.x: ElasticSearch connectors相关的代码被重构,新的代码结构更加清晰,所有与ElasticSearch相关的公用模块被放到common base里面,与ElasticSearch版本相关的代码分别放到不同的模块中,这与Kafka的代码结构类似。 详情请参见FLINK-4988。
-
Allow rescaling the Kinesis Consumer: Flink 1.2.0 introduced rescalable state for DataStream programs. With Flink 1.3, the Kinesis Consumer also makes use of that engine feature (FLINK-4821).
-
Transparent shard discovery for Kinesis Consumer: The Kinesis consumer can now discover new shards without failing / restarting jobs when a resharding is happening (FLINK-4577).
-
Allow setting custom start positions for the Kafka consumer: With this change, you can instruct Flink’s Kafka consumer to start reading messages from a specific offset (FLINK-3123) or earliest / latest offset (FLINK-4280) without respecting committed offsets in Kafka.
-
Allow out-opt from offset committing for the Kafka consumer: By default, Kafka commits the offsets to the Kafka broker once a checkpoint has been completed. This change allows users to disable this mechanism (FLINK-3398).
CEP Library
The CEP library has been greatly enhanced and is now able to accommodate more use-cases out-of-the-box (expressivity enhancements), make more efficient use of the available resources, adjust to changing runtime conditions–all without breaking backwards compatibility of operator state.
Please note that the API of the CEP library has been updated with this release.
Below are some of the main features of the revamped CEP library:
-
Make CEP operators rescalable: Flink 1.2.0 introduced rescalable state for DataStream programs. With Flink 1.3, the CEP library also makes use of that engine feature (FLINK-5420).
-
CEP library新引入的算子:
-
模式API的量词(*,+,?) (FLINK-3318)
-
支持不同的连续性(continuity)需求 (FLINK-6208)
-
支持迭代条件 (FLINK-6197)
Gelly Library
-
Unified driver for running Gelly examples FLINK-4949).
-
PageRank algorithm for directed graphs (FLINK-4896).
-
Add Circulant and Echo graph generators (FLINK-6393).
Known Issues
There are two known issues in Flink 1.3.0. Both will be addressed in the 1.3.1 release.
-
FLINK-6783: Wrongly extracted TypeInformations for
WindowedStream::aggregate
-
FLINK-6783: StateDescriptor cannot be shared by multiple subtasks
Apache Flink 1.3.0正式发布及其新功能介绍