某些系统(如StreamScope)要求函数具有确定性(以及它们的处理顺序),这是因为每条消息在流中都有其序列号。如果出现故障,此序列号用于确定是否应重新计算事件(因为它是由流持续存在的),因此下游节点不会计算两次相同的事件。
Flink,Spark Streaming,Kafka-Streams和Storm是否也要求功能具有确定性?
答案 0 :(得分:3)
是和否。这取决于;)
框架不会强迫您提供确定性功能。
如果发生故障,您的输入数据的某些部分将被重新计算。中间结果将被丢弃。因此,如果使用非确定性函数,则新生成的中间结果可能与前一个结果不同(在失败之前)。但是,如果您不关心这一点,那么使用非确定性就可以了。
此外,它取决于您使用的语义。
Flink / Storm(Trident)/ Spark(完全一次处理):
Flink / Storm / Kafka-Streams(至少一次处理):