簡體   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