如果Spark Steaming工作有2个问题,我正在寻找这个场景中的最佳实践。
这个流媒体工作正在听3个kafka主题。 信号主题 推文主题 Instagram主题
流作业要么使用推文的kafka主题 要么 流作业消耗了Instagram消息的kafka主题。
因此,基于"信号主题",流将使用Tweets或Instagram kafka主题上的消息。
首先,Spark流作业是否可以像这样交替?
此次使用场景中的最佳做法是什么?
如果我使用2个火花流作业执行此操作,我将不得不以某种方式暂停其中一个作业,因为一次只能运行1个。
答案 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生成的事件。我希望这能为你提供另一种观点。