gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:55:48 25 4
gpt4 key购买 nike

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

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

最佳答案

是和否。这取决于 ;)

这些框架不会强制您提供确定性函数。

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

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

Flink/Storm(Trident)/Spark(恰好一次处理):

  • Flink 仅为某些源和接收器提供 Exaclty-once
  • 为此,某些输出将被删除并在失败时重新计算
  • 例如 Flink 可以截断文件。因此,您可能希望确保不会出现稍后可能逆转的消费者输出(或者您可能不在乎...)
  • Spark/Storm 微批处理自动阻止下游消费者自动读取未提交的输出(我认为对于某些接收器,Flink 也是如此)

  • Flink/Storm/Kafka-Streams(至少一次处理):
  • 如果您在失败的情况下使用至少一次处理语义运行,您将在输出中得到一些重复。因此,如果您使用非确定性函数,那些“重复项”实际上可能具有不同的值(由于非确定性)
  • 关于apache-spark - 流处理中的非确定性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767008/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com