阅读几个主题

时间:2015-02-12 14:27:05

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

我正在尝试开发一个应用程序,该应用程序从kafka服务器获取四个不同的主题,并对每个主题采取特定的操作。

我创建了一个接收DStream的类,并且有一个应该转换DStream的方法。

例如,处理程序类:

class StreamHandler(stream:DStream[String]) {
  val stream:DStream[String] = stream

  def doActions():DStream[String] =  {
    //Do smth. to DStream
  }
}

现在,想象一下我从主类中为每个我想要的处理程序类调用doActions(),它会在每个到达的DStream中重复一次还是只重复一次?

val topicHandler1 = new StreamHandler(KafkaUtils.createStream(ssc, zkQuorum, "myGroup", Map("topic1"->1)).map(_._2)
val topicHandler2 = new OtherStreamHandler(KafkaUtils.createStream(ssc, zkQuorum, "myGroup", Map("topic2"->1)).map(_._2)

topicHandler1.doActions()
topicHandler2 .doActions()

ssc.start()

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

StreamHandler上声明的转换将应用于每批DStream。目前的代码非常不完整,无法给出一定的答案。在DStream转换管道中,您将需要action that materializes the DStream,否则不会发生任何事情。

关于这种方法,采用DStream并对其应用转换的函数就足够且易于测试:

val pipeline:DStream[Data] => () = dstream => 
    dstream.map(...).filter(...).print()

目前看,这类建设看起来并不多。