在Flink实战系列之自定义RetractStreamTableSink中介绍了如何编写自定义RetractStreamTableSink,Flink 中提供了另外一种可Redo模式的UpsertStreamTableSink,与RetractStreamTableSink不同的是:
1.在UpsertStreamTableSink中需要指定一个unique key , 该unique key既可以是single的也可以是composite的 ,所有的消息编码都是针对该unique key的,不需要用户自已指定,会在任务解析过程中自动生成, 通常是group by 中字段
2.RetractStreamTableSink针对需要update消息生成delete 与insert两条消息,但是UpsertStreamTableSink只会生成一条消息,称之为upsert,即可表示插入也可表示更新。
仍然以全局wordCount 为例:
class PaulUpsertStreamTableSink extends UpsertStreamTableSink[Row] {
private var fieldNames:Array[String]=_
private var fieldTypes:Array[TypeInformation[_]]=_
private var keys: Array[String]=_
private var isAppendOnly:lang.Boolean=_
/**
* unique key
* @p