Kafka sink如何支持结构化流中的更新模式?



我已经了解了不同的输出模式,如:

<<p>完整模式/strong>-整个更新的结果表将被写入接收器。
Append模式-只有在最后一次触发后添加到结果表中的新行才会被写入外部存储。
更新方式-只有自上次触发器以来在结果表中更新的行才会被写入外部存储

起初我以为我明白了上面的解释。

然后我遇到了这个:

文件接收器支持的模式:附加
Kafka sink支持的模式:添加、更新完成

等等! !什么? ? ! !

为什么我们不能直接把整个结果表写进文件?
我们如何更新Kafka中已经存在的条目?它是一个流,你不能只是寻找某些消息并更改/更新它们。

这完全没有意义。你能帮我理解一下吗?我只是不明白这在技术上是如何工作的

Spark为每个分区写一个文件,通常每个执行器一个文件。执行器以分布式方式运行。文件对于每个执行器来说都是本地的,所以append是有意义的——您不能完全替换单个文件,特别是在不丢失流中的数据的情况下。因此,您只能"追加新文件到文件系统",或者插入到现有文件中。

Kafka没有更新功能…Kafka集成指南没有提到这些模式,所以不清楚你指的是什么。你可以用write或者writeStream。它总是会"追加"。"complete"dataframe批处理(es)到Kafka主题的末尾。Kafka实现更新的方式是使用压缩主题,但这与Spark无关。

最新更新