Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 火花流+;卡夫卡:如何从卡夫卡消息中检查主题名称_Scala_Apache Kafka_Spark Streaming - Fatal编程技术网

Scala 火花流+;卡夫卡:如何从卡夫卡消息中检查主题名称

Scala 火花流+;卡夫卡:如何从卡夫卡消息中检查主题名称,scala,apache-kafka,spark-streaming,Scala,Apache Kafka,Spark Streaming,我正在使用Spark Streaming阅读卡夫卡主题列表。 我现在正在关注官方的API。我使用的方法是: val kafkaParams = Map("metadata.broker.list" -> configuration.getKafkaBrokersList(), "auto.offset.reset" -> "largest") val topics = Set(configuration.getKafkaInputTopic()) val stream = Kafka

我正在使用Spark Streaming阅读卡夫卡主题列表。 我现在正在关注官方的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 = ???
})
我想知道遗嘱执行人将如何阅读来自 主题列表?他们的政策是什么?他们会阅读一个主题和内容吗 然后当他们完成时,消息会传递到其他主题吗

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

调用此方法后,如何检查主题是什么 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())

您可以使用类似于var records=stream.map(record=>(record.topic))@israel.zing的映射,我认为
stream
中的元素是
Tuple2[String,String]
。没有名为topicThank you@Yuval的参数或方法,但仍然是。在阅读卡夫卡作品时,我如何访问信息和主题。使用
messageHandler
作为
createDirectStream
的参数,看起来我无论如何都做不到。@salvob我的代码片段就是这样做的。输出将是一个
DStream[(String,String)]
,其中第一个是主题名称。您的代码定义了一个流,其中假定包含每条记录的消息和主题。但是,当我试图打印元组的内容时(使用我问题中的代码片段-使用
println(key+topic+message)
,什么都没有发生正确返回消息编号though@salvob你试过我的代码片段了吗?是的!不同的是,
TopicsTopPartitions
需要是一个映射。我的流是一个
InputStream
,甚至没有rdd。collect向我显示消息