知识卡片
RowKind是变更消息的具体编码
内容
[[动态表的三种更新模式|动态表的更新语义]]落到具体实现上,靠的是每一条记录自带的RowKind标记,它有四种取值:INSERT(新增一行,输出标记”+I”)、UPDATE_BEFORE(更新前的旧值,标记”-U”)、UPDATE_AFTER(更新后的新值,标记”+U”)、DELETE(删除一行,标记”-D”)。一次更新在Retract模式下会先发一条UPDATE_BEFORE把旧行”撤回”,再发一条UPDATE_AFTER把新行”插入”,下游消费者靠正负号就能知道该对本地状态做加法还是减法。这套编码把抽象的”这张表变了”这件事,落实成了每条消息自带的、可以被任何下游按统一规则处理的最小操作单元,是changelog流在工程实现层面必须回答的问题:光说”表会变”是不够的,必须精确到每条消息到底代表增、删、改中的哪一种。
参考来源
《Flink入门与实战》第10章《Flink项目实战》