2016-11-09 98 views
0

当前设置:Spark Streaming作业处理时间序列数据的Kafka主题。每隔一秒钟,新的数据就会包含不同的传感器。此外,批处理间隔为1秒。通过updateStateByKey()有状态数据被计算为新的流。只要这个有状态数据超过阈值,就会在Kafka主题上生成一个事件。当价值后来降到tresh以下时,再次发生一个事件被激发的话题。用于kafka主题后处理的spark-streaming批处理间隔

到目前为止,这么好。

问题:当通过重新构建卡夫卡主题在数据上应用新算法时,我希望这样快速。但是这意味着每批都包含(数百)数千条消息。将这些内容在1批中移至updateStateByKey(),可以在结果数据流中得到1个该密钥的计算值。

当然,这是不可接受的,因为数据点的负载减少到一个。在实时流上生成的报警事件将不在重新计算的流上。所以用这种方法比较算法是完全没有用的。

问题:我该如何避免这种情况?最好不要切换框架。在我看来,我正在寻找一个真正的流媒体(每次1个事件)框架。另一方面,Spark流对我来说是新的,所以我肯定错过了很多。

+0

你的问题太抽象了!一些代码和细节可能会有帮助。 – rakesh

回答

0

在spark 1.6中,引入了一个用于与状态进行交互的新API mapWithState。我相信这会解决你的问题。

看看吧here