我必须设计一个带有以下用例的火花流应用程序。我正在寻找最好的方法。
我有应用程序将数据推送到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.
我需要回答以下问题。
你们在这里看到的任何其他问题?
高度评价您的回复。
答案 0 :(得分:4)
您必须使用recommended "Direct approach"而不是Receiver方法,否则您的应用程序将使用超过1000个内核,如果您没有更多内核,它将能够从您的Kafka中接收数据主题但不处理它们。来自Spark Streaming Doc:
请注意,如果要在流应用程序中并行接收多个数据流,可以创建多个输入DStream(在“性能调整”部分中进一步讨论)。这将创建多个接收器,这些接收器将同时接收多个数据流。但请注意,Spark worker / executor是一个长期运行的任务,因此它占用了分配给Spark Streaming应用程序的其中一个核心。
您可以看到in the Kafka Integration(Kafka 0.8 还有一个 0.10 )doc如何查看哪个主题属于某条消息
如果客户添加新主题或分区,则需要更新Spark Streaming的主题conf,然后重新部署它。如果您使用Kafka 0.10,您还可以使用RegEx作为主题的名称,请参阅Consumer Strategies。我在Kafka 0.8中经历过已删除主题的阅读,并且没有任何问题,仍然可以验证(“信任,但确认”)
在向群集提交申请时,请参阅Spark Streaming's doc about Fault Tolerance,同时使用模式--supervise
,有关详细信息,请参阅the Deploying documentation
为了实现完全一次的语义,我建议来自Spark Streaming主要提交者的这个Github:https://github.com/koeninger/kafka-exactly-once
奖金,类似StackOverFlow的帖子:Spark: processing multiple kafka topic in parallel
Bonus2 :留意即将发布的Spark 2.2和结构化流式广告组件