KafkaUtils010中的MessageHandler SparkStreaming

时间:2017-03-15 15:19:16

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

我想对每个主题进行分组,或者知道应用时来自哪个主题的消息:

val stream = KafkaUtils.createDirectStream[String, String](
    ssc,
    PreferConsistent, 
    Subscribe[String, String](
      Array(topicConfig.srcTopic),
      kafkaParameters(BOOTSTRAP_SERVERS,"kafka_test_group_id))
    )
  )

然而,在最新的API中,kafka010似乎不像以前的版本那样支持消息处理程序。关于如何获得主题的任何想法?

我的目标是使用N个主题来处理它们(以不同的方式取决于主题),然后将其推回到主题的1:1映射中的另外N个主题:

SrcTopicA--> Process --> DstTopicA
SrcTopicB--> Process --> DstTopicB
SrcTopicC--> Process --> DstTopicC

但是有些属性需要共享(这些属性会发生很大变化,因此无法使用广播变量)。因此,所有主题都需要在同一个火花作业中使用。

2 个答案:

答案 0 :(得分:0)

您可以使用ACTION_VIEW像这样过滤流:

topic

答案 1 :(得分:0)

在0.10中使用createDirectStream后,您将获得ConsumerRecord。此记录的值为topic。您可以创建主题和值的元组:

val stream: InputDStream[ConsumerRecord[String, String]] = 
  KafkaUtils.createDirectStream[String, String](
    streamingContext,
    PreferConsistent,
    Subscribe[String, String](topics, kafkaParams)
  )

val res: DStream[(String, String)] = stream.map(record => (record.topic(), record.value()))