- Queryable State的功能目前是beta版本,flink1.7的发行版默认没有开启,要开启的话,需要将flink-queryable-state-runtime_2.11-1.7.0.jar拷贝到/opt/flink/lib/目录下,这样子task manager启动的时候会打印诸如Started Queryable State Proxy Server @ /172.20.0.3:9069的日志,这样子就可以确认是启用了该功能.
- Queryable State在架构上涉及三个组件,一个是QueryableStateServer,它会在每个task manager上运行,负责本地state存储;一个是QueryableStateClientProxy,它也在每个task manager上运行,负责接收client发来的查询请求,然后从对应的task manager上获取对应的state,然后返回给client;一个是QueryableStateClient,它就是通常是运行在flink cluster之外,用于提交用户的state query.
- QueryableStateServer以及QueryableStateClientProxy均有ports、network-threads、query-threads的属性可以配置;QueryableStateServer默认的query.server.ports值为9097;QueryableStateClientProxy默认的query.proxy.ports值为9096,client端需要使用这个端口来进行请求.
- 声明state为queryable有两个方法,一个是通过KeyedStream.asQueryableState方法转为QueryableStateStream;一个是调用Managed keyed State的StateDescriptor的setQueryable进行声明;这两个的区别在于asQueryableState必须是直接作用于KeyedStream对象,因此KeyedStream就不能做后续的transform操作,类似于sink;而通过StateDescriptor的setQueryable进行声明则相对灵活一点;这里要注意没有queryable ListState.
- Queryable State目前有几点限制,一个是它生命周期跟task一样,在task运行完的时候就销毁了,没办法查询,后续可能支持在task完成之后查询;一个是目前的KvState的Notifications进行使用tell机制,后续可能改为ack模式;一个是目前query的statistics默认是禁用的,后续可能支持发布到metrics system
Flink Queryable State小结
最新推荐文章于 2021-10-11 23:11:34 发布