从Kafka接收空数据 - Spark Streaming

时间:2015-08-19 19:39:57

标签: apache-kafka spark-streaming

当我从kafka阅读主题时,为什么会收到空数据消息? 这是解码器的问题吗?

*没有错误或例外。

代码:

def main(args: Array[String]) {

val sparkConf = new SparkConf().setAppName("Queue Status")

val ssc = new StreamingContext(sparkConf, Seconds(1))
ssc.checkpoint("/tmp/")

val kafkaConfig = Map("zookeeper.connect" -> "ip.internal:2181",
  "group.id" -> "queue-status")
val kafkaTopics = Map("queue_status" -> 1)

val kafkaStream = KafkaUtils.createStream[String, QueueStatusMessage, StringDecoder, QueueStatusMessageKafkaDeserializer](
  ssc,
  kafkaConfig,
  kafkaTopics,
  StorageLevel.MEMORY_AND_DISK)

kafkaStream.window(Minutes(1),Seconds(10)).print()

ssc.start()
ssc.awaitTermination() 
}

Kafka解码器:

class QueueStatusMessageKafkaDeserializer(props: VerifiableProperties = null) extends Decoder[QueueStatusMessage] {
  override def fromBytes(bytes: Array[Byte]): QueueStatusMessage = QueueStatusMessage.parseFrom(bytes)
}

(空)结果:

-------------------------------------------
Time: 1440010266000 ms
-------------------------------------------
(null,QueueStatusMessage(,,0,None,None))
(null,QueueStatusMessage(,,0,None,None))
(null,QueueStatusMessage(,,0,None,None))
(null,QueueStatusMessage(,,0,None,None))

解决方案:

严格指定Kafka主题Map中的类型:

val kafkaTopics = Map[String, Int]("queue_status" -> 1)

仍然不知道问题的原因,但代码现在工作正常。

0 个答案:

没有答案