问题导读
1.Flink1.8引入对什么状态的连续清理?
2.保存点兼容性方面,不在兼容哪个版本?
3.Maven依赖在Hadoop方便发生了什么变化?
4.Flink是否发布带有Hadoop的二进制文件?
Flink1.8发布,主要改变如下:
1.将会增量清除旧的State
2.编程方面TableEnvironment弃用
3.Flink1.8将不发布带有Hadoop的二进制安装包
更多详细如下:
这次的发行版本讨论了Flink 1.7和Flink 1.8之间发生变化的重要方面,例如配置,特性或依赖性。
状态
1
、使用
TTL
(生存时间)连续增量清除旧的
Key
状态
我们在Flink 1.6(FLINK-9510)中为Key状态引入了TTL(生存时间)。
此功能允许在访问时清理并使Key状态条目无法访问。
另外,在编写保存点/检查点时,现在也将清理状态。
Flink 1.8引入了对RocksDB状态后端(FLINK-10471)和堆状态后端(FLINK-10473)的旧条数的连续清理。
这意味着旧的条数将(根据TTL设置)不断被清理掉。
2
、恢复保存点时对模式迁移的新支持
使用Flink 1.7.0,我们在使用AvroSerializer时添加了对更改状态模式的支持。
使用Flink 1.8.0,我们在TypeSerializers将所有内置迁移到新的序列化器快照抽象方面取得了很大进展,该抽象理论上允许模式迁移。
在Flink附带的序列化程序中,我们现在支持PojoSerializer (FLINK-11485)和Java EnumSerializer (FLINK-11334)以及有限情况下的Kryo(FLINK-11323)的模式迁移格式。
3
、保存点兼容性
TraversableSerializer 此序列化程序(FLINK-11539)中的更新,包含Scala的Flink 1.2中的保存点将不再与Flink 1.8兼容。
可以通过升级到Flink 1.3和Flink 1.7之间的版本,然后再更新至Flink 1.8来解决此限制。
4
、
RocksDB
版本冲突并切换到
FRocksDB
(
FLINK-10471
)
需要切换到名为FRocksDB的RocksDB的自定义构建,因为需要RocksDB中的某些更改来支持使用TTL进行连续状态清理。
FRocksDB的已使用版本基于RocksDB的升级版本5.17.2。
对于Mac OS X,仅支持OS X版本> =10.13的RocksDB版本5.17.2。
另见:
https:
//github.com/facebook/rocksdb/issues/4862。
Maven 依赖
1、使用Flink捆绑Hadoop库的更改(FLINK-11266)
包含hadoop的便捷二进制文件不再发布。
如果部署依赖于flink-shaded-hadoop2包含 flink-dist,则必须从下载页面的可选组件部分手动下载并打包Hadoop jar并将其复制到/lib目录中。
另外一种方法,可以通过打包flink-dist和激活 include-hadoopmaven配置文件来构建包含hadoop的Flink分发。
由于hadoop flink-dist默认不再包含在内,因此指定-DwithoutHadoop何时打包flink-dist将不再影响构建。
配置
1、TaskManager配置(FLINK-11716)
TaskManagers现在默认绑定到主机IP地址而不是主机名。
可以通过配置选项控制此行为taskmanager.network.bind-policy。
如果你的Flink集群在升级后遇到莫名其妙的连接问题,尝试设置taskmanager.network.bind-policy: name在flink-conf.yaml 返回前的1.8的设置行为。
Table API
1、直接表构造函数使用的取消预测(FLINK-11447)
Flink 1.8不赞成Table在Table API中直接使用该类的构造函数。
此构造函数以前将用于执行与横向表的连接。
你现在应该使用table.joinLateral()或 table.leftOuterJoinLateral()代替。
这种更改对于将Table类转换为接口是必要的,这将使Table API在未来更易于维护和更清洁。
2、引入新的CSV格式符(FLINK-9964)
此版本为符合RFC4180的CSV文件引入了新的格式符。
新描述符可用作 org.apache.flink.table.descriptors.Csv。
目前,这只能与Kafka一起使用。
旧描述符可org.apache.flink.table.descriptors.OldCsv用于文件系统连接器。
3、静态生成器方法在TableEnvironment(FLINK-11445)上的弃用
为了将API与实际实现分开,
TableEnvironment.getTableEnvironment()
不推荐使用静态方法。
你现在应该使用
Batch/StreamTableEnvironment.create()。
4、表API Maven模块中的更改(FLINK-11064)
之前具有flink-table依赖关系的用户需要更新其依赖关系flink-table-planner以及正确的依赖关系flink-table-api-*,具体取决于是使用Java还是Scala:
flink-table-api-java-bridge或者flink-table-api-scala-bridge。
5、更改为外部目录表构建器(FLINK-11522)
ExternalCatalogTable.builder()不赞成使用ExternalCatalogTableBuilder()。
6、更改为表API连接器jar的命名(FLINK-11026)
Kafka/elasticsearch6 sql-jars的命名方案已经更改。
在maven术语中,它们不再具有sql-jar限定符,而artifactId现在以前缀为例,flink-sql而不是flink例如flink-sql-connector-kafka。
7、更改为指定Null的方式(FLINK-11785)