Spark流工作有2个问题,最佳做法是什么

时间:2016-12-08 21:09:18

标签: scala apache-spark spark-streaming

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

这个流媒体工作正在听3个kafka主题。     信号主题     推文主题     Instagram主题

流作业要么使用推文的kafka主题 要么 流作业消耗了Instagram消息的kafka主题。

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

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

此次使用场景中的最佳做法是什么?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

在我看来,任何流媒体作业都只能由一个事件触发。您不应该妨碍如何触发流式传输作业。

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

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

Job2,Job3可以是非流媒体作业,完全取决于Job1生成的事件。我希望这能为你提供另一种观点。