使用Kafka和Spark Streaming来提供Web应用程序

时间:2018-06-16 12:38:00

标签: apache-spark service apache-kafka web spark-streaming

假设我有一个网站,其中包含用户可以访问某些值的表单。现在我想获取这些值,使用Spark Streaming处理它们并将结果返回给用户。像这样:

enter image description here

详细设置并不重要 - Spark Streaming可以做一些推荐或预测,可以坐在Databricks之上;后端可以是Flask应用程序......

我的问题是:

  1. 如何告诉网站后端服务器Spark Streaming处理输入数据并在某处输出结果?
  2. 这条管道错过了哪些部分?一些中间数据库,如Redis / Mongo / SQL?一些消息经纪人,如Kafka?
  3. 我无法理解Spark Streaming将信息发送回网站后端的部分。如果我将Spark Streaming处理的结果发送到数据库(Mongo,Redis,MySQL),文件系统(S3,Blob,HDFS)或消息代理(Kafka,Kinesis),如何告诉网站后端有关它的信息?

1 个答案:

答案 0 :(得分:3)

您接近基于事件驱动架构的解决方案。在我看来,我会有以下组件:

  1. 网站后端。此服务是连接到Apache Kafka以生成和使用事件的服务。它将从UI接收所有事件,然后将由UI触发的事件发布到Kafka主题中。您可以为每种类型的事件创建一个主题。为了对事件进行分类。另一方面,它还将扮演Consumer(监听器)的角色,它将从不同的主题中读取消息,其中来自Apache Spark的答案将发布到Kafka。

  2. Apache Kafka 。这是图片中所缺少的组件。它将扮演将消息传递给订阅主题的不同组件的角色。确保您在不同的主题中分类了所有事件。

  3. Spark Streaming 。这个组件将听取Kafka的一些事件。根据您获得的事件,您可能希望以不同方式处理事件。使用Apache Spark处理事件后,您将把输出发送到Apache Kafka。

  4. 基本上,根据您的需要,将Apache Kafka用于事件驱动架构会很好。如果您想深入了解Apache Kafka的服务架构,请查看this out

    如果你想增加一个级别的存储空间作为Casandra存储预测的结果真的取决于你,我认为这将是一个好主意,这样你就不需要为事件触发Spark工作了已经处理过了。