Apache kafka Kafka在Spark Streaming中创建DirectStream

Apache kafka Kafka在Spark Streaming中创建DirectStream,apache-kafka,spark-streaming,spark-streaming-kafka,Apache Kafka,Spark Streaming,Spark Streaming Kafka,我正在尝试来自的示例代码。代码可以运行没有任何错误,但我无法接收任何记录。如果我从一开始就运行kafka-console-consumer.sh,我可以获得记录。有人知道原因吗?我的代码如下: val broker = "221.181.73.44:19092" val topics = Array("connect-test") val groupid = "SparkStreamingLoad3" val kafkaParams = Map[String, Object]( "boots

我正在尝试来自的示例代码。代码可以运行没有任何错误,但我无法接收任何记录。如果我从一开始就运行kafka-console-consumer.sh,我可以获得记录。有人知道原因吗?我的代码如下:

val broker = "221.181.73.44:19092"
val topics = Array("connect-test")
val groupid = "SparkStreamingLoad3"
val kafkaParams = Map[String, Object](
  "bootstrap.servers" -> broker,
  "group.id" -> groupid,
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[StringDeserializer],
  "auto.offset.reset" -> "earliest", //earliest | latest
  "enable.auto.commit" -> (false: java.lang.Boolean)
)

val stream = KafkaUtils.createDirectStream[String, String](ssc, PreferConsistent, Subscribe[String, String](topics, kafkaParams))

stream.print()

ssc.start()
ssc.awaitTermination()
我的SBT构建是:

version := "1.0"
scalaVersion := "2.10.6"
libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-streaming-kafka-0-10_2.10" % "2.1.0",
  "org.apache.spark" % "spark-core_2.10" % "2.1.0",
"org.apache.spark" % "spark-streaming_2.10" % "2.1.0",
"org.apache.kafka" % "kafka_2.10" % "0.10.2.1"
)
谢谢

val broker = "221.181.73.44:19092"
默认端口是9092,这可能是问题所在

auto.offset.reset->earlime和enable.auto.commit->false应始终使您从主题日志的开头开始读取,因为您的偏移量不会存储在任何位置。所以这没有问题


另外,我们可以看到您对kafka-console-consumer.sh使用的完整命令吗?

最后,我解决了这个问题。答案如下:

主题中的数据由console producer生成,console producer是一个字符串列表。但是,数据的格式为[Array[Byte],Array[Byte]]。不是[字符串,字符串]。所以,如果我使用StringDeserializer,将不会收到任何数据

我从控制台了解到消费者源代码writeToconsumerRecord:ConsumerRecord[Array[Byte],Array[Byte]],output:PrintStream:Unit

RDD中的键/值可能包含空值。在我的例子中,所有键都是空的。我使用以下代码获取数据:

stream=KafkaUtils.createDirectStream[Array[Byte],Array[Byte]]ssc,PreferConsistent,Subscribe[Array[Byte],Array[Byte]]主题,kafkaParams
stream.maprdd=>new StringOptionrdd.key.getOrElsenull.getBytes+| | | | | | | | | | | |+new StringOptionrdd.value.getOrElsenull.getBytes.print

您运行的卡夫卡也是0.10.x版本吗?服务器上运行的卡夫卡版本是0.10.2.1。在libs文件夹中,我有kafka_2.10-0.10.2.1.*文件。版本与SBT生成配置相同。您如何检查流中数据的真实格式?