Apache flink 使用Apache Flink自定义水印

Apache flink 使用Apache Flink自定义水印,apache-flink,Apache Flink,我正在研究可以插入数据流的水印类型 虽然这可能超出了水印的用途,但我还是会问 您能否创建一个包含时间戳和k/v对的水印(this=that,that=this) 因此,水印将保存{12DEC180500GMT,this=that,that=this} 或 {时间戳,kvp1,kvp2,kvpN} 这样的事情可能吗?我已经查看了用户和API文档,但可能忽略了一些内容不,Flink中的水印类 (发现于 flink/flink streaming/java/src/main/java/org/apac

我正在研究可以插入数据流的水印类型

虽然这可能超出了水印的用途,但我还是会问

您能否创建一个包含时间戳和k/v对的水印
(this=that,that=this)

因此,水印将保存
{12DEC180500GMT,this=that,that=this}

{时间戳,kvp1,kvp2,kvpN}


这样的事情可能吗?我已经查看了用户和API文档,但可能忽略了一些内容

不,Flink中的水印类 (发现于 flink/flink streaming/java/src/main/java/org/apache/flink/streaming/api/watermark/watermark.java) 除了MAX_WATERMARK之外还有一个实例变量,即

/** The timestamp of the watermark in milliseconds. */
private final long timestamp;

因此,除了时间戳之外,水印不能携带任何信息,时间戳必须是一个长值

我不相信API是为了适应这种情况而设计的,但是如果你解释一下为什么你会发现这种方法很有用,你会想到一种替代的实现方法。@DavidAnderson希望我添加的图表和注释能帮助你澄清这一点。该驱动器文件不可公开访问。@DavidAnderson该文件现在可用。@DavidAnderson刚刚更改了设置,允许任何具有链接的人访问。这是实际的答案。我想知道这是否有用取决于这个值和那个值的来源,是否有访问数据的方法。如果数据来自流中的事件,则可以在需要时从事件中提取数据。如果它们是常量变量,则可以在代码的其他地方定义并使用它们。若它们是动态值,您可以创建一个不同的this和that值流,并将其连接到原始字符串。你在考虑另一种情况吗?