针对1000多个主题的Spark Streaming Design

时间:2017-06-13 20:04:32

标签: apache-spark spark-streaming spark-dataframe

我必须设计一个带有以下用例的火花流应用程序。我正在寻找最好的方法。

我有应用程序将数据推送到1000多个不同的主题,每个主题都有不同的目的。 Spark流将从每个主题接收数据,并且在处理之后它将回写到相应的另一个主题。

Ex. 

Input Type 1 Topic  --> Spark Streaming --> Output Type 1 Topic 
Input Type 2 Topic  --> Spark Streaming --> Output Type 2 Topic 
Input Type 3 Topic  --> Spark Streaming --> Output Type 3 Topic 
.
.
.
Input Type N Topic  --> Spark Streaming --> Output Type N Topic  and so on.

我需要回答以下问题。

  1. 每个主题推出1000+火花流应用程序是一个好主意吗?或者我应该有一个流媒体应用程序用于所有主题,因为处理逻辑将是相同的?
  2. 如果有一个流式上下文,那么我如何确定哪个RDD属于哪个Kafka主题,以便在处理后我可以将其写回相应的OUTPUT主题?
  3. 客户端可以添加/删除Kafka中的主题,如何在Spark流中动态处理?
  4. 如何在失败时自动重启作业?
  5. 你们在这里看到的任何其他问题?

    高度评价您的回复。

1 个答案:

答案 0 :(得分:4)

  1. 1000个不同的Spark应用程序将无法维护,无法想象部署或升级每个应用程序。
  2. 您必须使用recommended "Direct approach"而不是Receiver方法,否则您的应用程序将使用超过1000个内核,如果您没有更多内核,它将能够从您的Kafka中接收数据主题但不处理它们。来自Spark Streaming Doc

      

    请注意,如果要在流应用程序中并行接收多个数据流,可以创建多个输入DStream(在“性能调整”部分中进一步讨论)。这将创建多个接收器,这些接收器将同时接收多个数据流。但请注意,Spark worker / executor是一个长期运行的任务,因此它占用了分配给Spark Streaming应用程序的其中一个核心。

    1. 您可以看到in the Kafka Integration(Kafka 0.8 还有一个 0.10 )doc如何查看哪个主题属于某条消息

    2. 如果客户添加新主题或分区,则需要更新Spark Streaming的主题conf,然后重新部署它。如果您使用Kafka 0.10,您还可以使用RegEx作为主题的名称,请参阅Consumer Strategies。我在Kafka 0.8中经历过已删除主题的阅读,并且没有任何问题,仍然可以验证(“信任,但确认”)

    3. 在向群集提交申请时,请参阅Spark Streaming's doc about Fault Tolerance,同时使用模式--supervise,有关详细信息,请参阅the Deploying documentation

    4. 为了实现完全一次的语义,我建议来自Spark Streaming主要提交者的这个Github:https://github.com/koeninger/kafka-exactly-once

      奖金,类似StackOverFlow的帖子:Spark: processing multiple kafka topic in parallel

      Bonus2 :留意即将发布的Spark 2.2和结构化流式广告组件