有 2 个问题的 Spark 流作业,最佳实践是什么

Spark stream job with 2 concerns, what is the best practise

如果 Spark Steaming 作业有 2 个问题,我正在寻找在此场景中的最佳实践。

此流媒体作业正在监听 3 个 kafka 主题。 信号主题 推文主题 Instagram 主题

流作业为推文使用 kafka 主题 或者 流作业为 instagram 消息使用 kafka 主题。

因此,基于 "signal topic",流将使用 Tweets 或 Instagram kafka 主题上的消息。

首先,Spark stream作业是否可以这样交替?

这个使用场景的最佳实践是什么?

如果我用 2 个 spark stream 作业执行此操作,我将不得不以某种方式暂停其中一个作业,因为一次只能 运行 一个。

这是不可能的。 DStreams 一旦创建就不能暂停或修改。我会说你有 2 个选择:

  • 保持应用程序不变并忽略基于 "signal" 的一个流。它涉及并且需要低级别 API 以避免不必要的数据加载。如果您对天真的解决方案感到满意,您可以尝试:

    var readTwitter: Boolean = ??? // Varies from batch to batch
    val twitterStream = twitterSource.filter(_ => readTwitter)
    val instagramStream = instagramSource.filter(_ => !readTwitter)
    
  • 上游的备用进程根据 "signal" 将消息重定向到单个流,并让应用程序不知道正在发生什么。

在我看来,任何 Streaming 作业都应该只由事件触发。您不应该妨碍流媒体作业的触发方式。

而且,在你的情况下,你为什么不能分离关注点's.Let你的信号主题由 Job1 流式传输,这决定了要触发哪个作业。

为此,如果需要触发 Job2,则让 Job1 将消息推送到主题 2,如果需要触发 Job3,则让它将消息推送到主题 3。

Job2、Job3 可以是非流作业,完全取决于 Job1 生成的事件。我希望这能让你从另一个角度看待正在思考的事情。