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

vmdwslir  于 2022-12-17  发布在  Apache
关注(0)|答案(1)|浏览(106)

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

完整模式-整个更新的结果表格将写入接收器。
追加模式-只有自上次触发后追加到“结果表”中的新行才会写入外部存储器。
更新模式-只有自上次触发后在结果表中更新的行将写入外部存储器

起初我以为我理解了上面的解释。
然后我发现了这个

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

等等!!什么??!!
为什么我们不能把整个结果表写出来存档呢?
我们怎样才能更新Kafka中已经存在的条目呢?它是一个流,你不能只是寻找某些信息并改变/更新它们。
这完全说不通。
你能帮我理解一下吗?我只是不明白技术上是怎么回事

wixjitnu

wixjitnu1#

Spark在每个分区写一个文件,通常每个执行器写一个文件。执行器以分布式方式运行。文件对于每个执行器来说都是本地的,所以append是有意义的--你不能完全替换单个文件,特别是在不丢失流中数据的情况下。所以你只能“append new files to filesystem",或者插入到现有文件中。
Kafka没有更新功能...... Kafka Integration Guide没有提到这些模式中的任何一种,所以不清楚你指的是什么。你使用writewriteStream。它总是将“完整的” Dataframe 批“附加”到Kafka主题的末尾。Kafka实现类似更新的方式是使用压缩的主题,但这与Spark无关。

相关问题