【问题标题】:Is it possible to implement a reliable receiver which supports non-graceful shutdown?是否有可能实现一个支持非正常关闭的可靠接收器?
【发布时间】:2021-06-11 13:48:53
【问题描述】:

我很好奇 Spark 流应用程序是否必须优雅地关闭,或者它存在通过预写日志导致重复数据的风险。在下面的场景中,我概述了队列接收器与队列交互需要消息确认的步骤序列。

  1. Spark 队列接收器从队列中拉出一批消息。
  2. Spark 队列接收器将这批消息存储到预写日志中。
  3. Spark 应用程序在 ack 发送到队列之前终止。
  4. Spark 应用程序再次启动。
  5. 预写日志中的消息通过流应用程序进行处理。
  6. Spark 队列接收器从队列中提取一批消息,这些消息已在步骤 1 中看到,因为它们未被确认为已接收。
  7. ...

我对应该如何实现自定义接收器、随之而来的重复问题以及需要正常关闭是否正常的理解是否正确?

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    底线:这取决于你的输出操作。

    使用 Direct API 方法,即 introduced on V1.3,消除了 Spark Streaming 和 Kafka 之间的不一致,因此即使失败,Spark Streaming 也会有效地接收每条记录,因为 Spark Streaming 在其检查点内跟踪偏移量。

    为了实现结果输出的一次性语义,将数据保存到外部数据存储的输出操作必须是幂等的,或者是保存结果和偏移量的原子事务。

    有关 Direct API 及其使用方法的更多信息,请查看 Databricks 的 this blog post

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多