簡體   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