Kafka Direct Stream参数的Spark Streaming更新

时间:2016-07-27 20:33:22

标签: scala apache-spark spark-streaming

我有以下代码:

//Set basic spark parameters
val conf = new SparkConf()
  .setAppName("Cartographer_jsonInsert")
val sc = new SparkContext(conf)
val ssc = new StreamingContext(sc, Seconds(2))

val messagesDStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder, Tuple4[String, Int, Long, String]](ssc, getKafkaBrokers, getKafkaTopics("processed"), (mmd: MessageAndMetadata[String, String]) => {
  (mmd.topic, mmd.partition, mmd.offset, mmd.message().toString)
})

getKafkaBrokers和getKafkaTopics调用一个API,在我们将它们添加到系统时检查数据库中的特定新主题。 SSC在每次迭代时运行更新变量吗?那么每次都会使用新变量重新创建messageDStream吗?

它看起来不像,有什么办法可以实现吗?

2 个答案:

答案 0 :(得分:1)

Spark Streaming的创造者之一Tathagata Das在Spark User List中回答了有关现有DStream修改的类似问题。

  

目前,Spark Streaming在流式上下文启动后不支持添加/删除/修改DStream。   您也无法重新启动已停止的流式上下文。   此外,多个火花上下文(因此多个流上下文)不能在同一JVM中同时运行。

我没有看到使用Spark Streaming实现此功能的直接方法,因为您无法更新图表。您需要比当前可用的更多控制。也许基于Reactive Kafka的解决方案,Kafka的Akka Streams连接器。或者您控制源的任何其他基于流的解决方案。

答案 1 :(得分:0)

任何原因你没有使用Akka Graph with reactive-kafka(https://github.com/akka/reactive-kafka)。构建反应流非常容易,其中源可以被赋予主题,流可以处理消息并下沉到接收结果。

我构建了一个示例应用程序正在使用相同的https://github.com/asethia/akka-streaming-graph