API调用的Spark Streaming架构

时间:2016-09-01 21:44:37

标签: spring-boot architecture spark-streaming

这更像是关于在火花流中做某事的正确方法的调查帖子。我所拥有的是一个接收卡夫卡流的Spark Streaming App。在我们收到的每条消息的Kafka流中,我正在调用2个API,它将运行在postgres数据库的ontop上运行的Spring Boot服务器。

问题是我们每天收到超过100万条消息,目前至少有200万次点击我们的API服务器。规模只会增长。我们还计划再增加2个呼叫,这样就可以将服务器的呼叫数量增加一倍。我需要点击API服务器的原因是我们应用于每个消息的规则随着时间的推移而变化。我唯一想到的是将API调用后面的表放入流应用程序将调用的变量中。然后,我将设置另一个代理,该代理将轮询postgres以进行表更改,并让它更新流式作业将调用的变量。

唯一的问题是使用像广播变量之类的东西,你只能通过重新启动火花串流应用程序来刷新。有没有人知道我可以放在API服务器/ Spark Streaming应用程序之间的任何框架或工具,以允许我们在不担心DDOS的情况下成长。

1 个答案:

答案 0 :(得分:1)

我想我最重要的是,有3种选择:

  1. 使用缓存代理,但实质上是将数据库中的问题卸载到缓存中。还有缓存失效的问题。但是,如果您已经知道了所期望的查询并缓存了具体化的值,那么它可以提供帮助。这样就可以避免多次调用缓存服务器。

  2. 将数据库日志作为Kafka主题提供。现在,您可以在火花流媒体应用中加入这两个流。这样您就可以将数据库记录中的更改直接发送到您的spark应用程序。看看这是否有所帮助 - 最初由Martin Kleppmann撰写:https://github.com/confluentinc/bottledwater-pg

  3. 使用像Alluxio这样的堆外内存(它与spark集成得非常好)。但是设置非常复杂,因为内存网格必须跨越您的执行程序节点。我不太确定这个解决方案的可行性,但你可以调查一下。