前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flink key state 为何仅与 key 有关的

Flink key state 为何仅与 key 有关的

作者头像
shengjk1
发布2020-05-27 09:15:25
9990
发布2020-05-27 09:15:25
举报
文章被收录于专栏:码字搬砖码字搬砖
代码语言:txt
复制
- [2.1 add、get 方法讲解](https://blog.csdn.net/#2.1)
- [2.2 关键性方法讲解](https://blog.csdn.net/#2.2)

1. 依赖

前面两篇我已经讲过 Flink getRuntimeContext().getMapState的时候发生了什么?以及 Flink StateDescriptor Name的作用

今天我们在这个的基础上一起来看一下,为什么 key state 仅仅与 key 有关,无论我取数据还是修改数据,仅仅只能取到(修改)这个key 对应的那一部分。

2. 以 RocksDBListState 为例

2.1 add、get 方法讲解

我们以 RocksDBListState 为例。分别查看 get 方法 和 add 方法 get 方法 通过源码我们可以追踪到

代码语言:javascript
复制
	byte[] key = serializeCurrentKeyWithGroupAndNamespace();
			byte[] valueBytes = backend.db.get(columnFamily, key);
			return deserializeList(valueBytes);

同理 add 方法

代码语言:javascript
复制
backend.db.merge(
				columnFamily,
				writeOptions,
				serializeCurrentKeyWithGroupAndNamespace(),
				serializeValue(value, elementSerializer)
			);

columnFamily 就不用说了,具体可以参考 Flink StateDescriptor Name的作用,主要就是 ColumnFamily Handle

writeOptions rockdb 的写控制,比如说是 sync 还是 async等

serializeValue 就是把 value 序列化成 byte 数组。

2.2 关键性方法讲解

关键性的方法来了 serializeCurrentKeyWithGroupAndNamespace, 就是序列化 key key-group namespace( 当时window 的时候 就是window( 如:TimeWindow{start=1590502000000, end=1590503000000} ) 否则就是 VoidNamespace), **它的作用就是 ColumnFamily 下的 key**

跟随 serializeCurrentKeyWithGroupAndNamespace 方法

代码语言:javascript
复制
// the bytes for the serialized composite key of key-group, key, namespace
	// key-group key namespace 序列化为 rockdb 在指定 column family 下的 key,value 就是 value
	byte[] serializeCurrentKeyWithGroupAndNamespace() {
		return sharedKeyNamespaceSerializer.buildCompositeKeyNamespace(currentNamespace, namespaceSerializer);
	}

3. 结论

像 add clear update 等方法都会用到 serializeCurrentKeyWithGroupAndNamespace 这也就是为什么,key state 只会有 key 有关,因为去取值或者修改的时候需要依赖于 key。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 依赖
  • 2. 以 RocksDBListState 为例
  • 2.1 add、get 方法讲解
  • 2.2 关键性方法讲解
  • 3. 结论
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档