Kafka制作人消息未显示在消费者中(通过kafka-spark流式传输读取)

时间:2017-08-09 11:27:07

标签: scala apache-kafka spark-streaming kafka-consumer-api

使用KAFKA PRODUCER命令:

<body><a href="index.php\"><img src="/wp-content/uploads/2017/07/10" onmouseover="this.src='/wp-content/uploads/2017/07/20';" onmouseout="this.src='/wp-content/uploads/2017/07/10';">asdf</a></body>

消费者火花流使用的代码片段并打包为jar-

#-> kafka-console-producer --broker-list  brokerhost:9093 --topic testtopic --producer.config client.properties

Hello 

How are you

Bye

Where is my message?

用于运行打包的jar-

的命令
        val sparkConf = new SparkConf().setAppName("kk-KafkaSparktest")
        val ssc = new StreamingContext(sparkConf, Seconds(2))
        val lines = KafkaUtils.createStream(ssc, "brokerhost:9093", 
        "spark-streaming-consumer-group", Map("testtopic" -> 5))
        lines.print()
        ssc.start()
        ssc.awaitTermination()

日志上显示的输出

spark-submit --conf 'spark.executor.extraJavaOptions=-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/KK/kafka/jaas.conf' --conf 'spark.driver.extraJavaOptions=-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/KK/kafka/jaas.conf' --class main.scala.sparkkafka --master yarn --deploy-mode cluster kafkaproj2_2.10-1.0.jar

我在这里缺少什么?我需要对代码进行任何更改吗?我认为期望是KEY:VALUE对中的消息,但我们在这里看不到任何内容。

2 个答案:

答案 0 :(得分:0)

可能是因为您尝试推入端口9093并阅读9092

首先检查你的信息是否适用于kafka:  kafka-console-consumer --bootstrap-server brokerhost:9093 --topic testtopic

然后我认为您可以对名为&#39;结构流媒体&#39;的新API感兴趣。添加到火花2.2:https://spark.apache.org/docs/2.1.0/structured-streaming-kafka-integration.html

答案 1 :(得分:0)

这里有一些步骤:

首先,检查Kafka话题是否有消息

kafka-console-consumer.sh --zookeeper --topic --from-beginning --property print.key = true --property key.separator =,                                     --property print.key = true \                                     --property key.separator =,

如果它正在打印消息,那么你在kafka中有消息,如果不是,那么你的生产者不能正常工作

如果在Kafka中有消息,请尝试以下代码

lines.foreachRDD { rdd =>
// Get the offset ranges in the RDD
val offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
for (o <- offsetRanges) {
  rdd.map(x=>x.value().mkString(",")).foreach(println)
  println(s"${o.topic} ${o.partition} offsets: ${o.fromOffset} to 
${o.untilOffset}")
}
}
lines.map(record => record.value().mkString(",")).count()
下面的

是生产者

的简单命令
echo '00157,{"name":"xyz", "title":"dev"}' | 
kafka-console-producer.sh \
        --broker-list <brokeer list> \
        --topic <topic name> \
        --property parse.key=true \
        --property key.separator=, \
        --new-producer