繁体   English   中英

Spark Streaming + Kafka:如何从kafka消息中检查主题名称

[英]Spark Streaming + Kafka: how to check name of topic from kafka message

我正在使用Spark Streaming从Kafka主题列表中读取。 我正在关注此链接的官方API。 我使用的方法是:

val kafkaParams = Map("metadata.broker.list" -> configuration.getKafkaBrokersList(), "auto.offset.reset" -> "largest")
val topics = Set(configuration.getKafkaInputTopic())
val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
            ssc, kafkaParams, topics)

我想知道遗嘱执行人将如何从主题列表中读取消息? 他们的政策是什么? 他们会阅读一个主题,然后当他们完成消息传递给其他主题?

最重要的是,在调用此方法后,我怎样才能检查RDD中消息的主题是什么?

stream.foreachRDD(rdd => rdd.map(t => {
        val key = t._1
        val json = t._2
        val topic = ???
})

我想知道遗嘱执行人将如何从主题列表中读取消息? 他们的政策是什么? 他们会阅读一个主题,然后当他们完成消息传递给其他主题?

在直接流方法中,驱动程序负责读取您要使用的Kafka主题的偏移量。 它的作用是在主题,分区和需要读取的偏移之间创建映射。 在此之后,驱动程序会为每个工作人员分配一个范围,以便读入特定的Kafka主题。 这意味着如果一个工作者可以同时运行2个任务(仅仅是为了示例,它通常可以运行更多),那么它可以同时从两个独立的Kafka主题中读取。

在调用此方法后,我怎样才能检查RDD中消息的主题是什么?

您可以使用createDirectStream的重载,该重载采用MessageHandler[K, V]

val topicsToPartitions: Map[TopicAndPartition, Long] = ???

val stream: DStream[(String, String)] = 
  KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
        ssc, 
        kafkaParams, 
        topicsToPartitions,
        mam: MessageAndMetadata[String, String]) => (mam.topic(), mam.message())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM