繁体   English   中英

卡夫卡生产者消息未在消费者中显示(通过卡夫卡火花流媒体读取)

[英]Kafka producer messages not showing up in consumer (read via kafka-spark streaming)

使用的KAFKA PRODUCER命令:

#-> 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()

用于运行打包的jar的命令–

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

输出显示在日志中

-------------------------------------------
Time: 1502275406000 ms
-------------------------------------------

-------------------------------------------
Time: 1502275408000 ms
-------------------------------------------

-------------------------------------------
Time: 1502275410000 ms
-------------------------------------------

-------------------------------------------
Time: 1502275412000 ms
-------------------------------------------

-------------------------------------------
// no key value pairs here

我在这里想念什么? 我是否需要对代码进行任何更改? 我认为期望是KEY:VALUE对中的消息,但在这里什么也看不到。

也许是因为您尝试9093端口9093并读入9092

首先检查您的消息在kafka中是否良好: kafka-console-consumer --bootstrap-server brokerhost:9093 --topic testtopic

然后,我认为您会发现对添加到spark 2.2的新API“结构化流”感兴趣: https : //spark.apache.org/docs/2.1.0/structured-streaming-kafka-integration.html

这里一些步骤:

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

kafka-console-consumer.sh --zookeeper --topic --from --beginning --property print.key = true-属性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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM