apachespark-流处理中的非确定性函数


0

像StreamScope这样的一些系统要求函数是确定性的(以及它们被处理的顺序),这是因为在流中每个消息都有其序列号。在失败的情况下,这个序列号用于确定是否应该重新计算一个事件(因为它是由流 persist化的),这样下游节点就不会计算相同的事件两次。

Flink、Spark Streaming、Kafka Streams和Storm是否也要求函数具有确定性?

1 答案


0

是与否,视情况而定;)

这些框架并不强迫您提供确定性函数。

如果出现故障,将重新计算输入数据的某些部分。中间结果将被丢弃。因此,如果使用非确定性函数,新生成的中间结果可能与前一个(失败前)不同。但是,如果你不关心这一点,使用非决定论也没问题。

此外,它取决于您使用的语义。

Flink/Storm(三叉戟)/Spark(正好一次处理):

    Flink只对特定的源和汇提供一次execly

Flink/Storm/Kafka溪流(至少一次处理):

    如果在失败的情况下至少使用一次处理语义运行,那么输出中会有一些重复的内容。因此,如果使用非确定性函数,那么这些“重复项”实际上可能具有不同的值(由于非确定性)

我来回答

写文章

提问题

面试题