【问题标题】:Spark stream job with 2 concerns, what is the best practise有 2 个问题的 Spark 流作业,最佳实践是什么
【发布时间】:2018-04-23 00:00:22
【问题描述】:

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

此流式作业正在收听 3 个 kafka 主题。 信号主题 推文话题 Instagram 主题

流作业要么为 Tweets 消耗一个 kafka 主题 或者 流作业使用 kafka 主题来获取 instagram 消息。

因此,基于“信号主题”,流将消费 Tweets 或 Instagram kafka 主题上的消息。

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

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

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

【问题讨论】:

    标签: scala apache-spark spark-streaming


    【解决方案1】:

    这是不可能的。 DStreams 一经创建便无法暂停或修改。我会说你有两个选择:

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

      var readTwitter: Boolean = ??? // Varies from batch to batch
      val twitterStream = twitterSource.filter(_ => readTwitter)
      val instagramStream = instagramSource.filter(_ => !readTwitter)
      
    • 上游的备用进程根据“信号”将消息重定向到单个流,并使应用程序对正在发生的事情一无所知。

    【讨论】:

    • 需要低级 API 的任何线索?
    【解决方案2】:

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

    而且,在您的情况下,为什么不能将关注点分开。让您的信号主题由 Job1 流式传输,这将决定要触发哪个作业。

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

    Job2,Job3 可以是非流式作业,它完全取决于 Job1 生成的事件。我希望这能让您从另一个角度了解正在思考的问题。

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多