使用选项kafka.bootstrap.servers不消耗spark-streaming-kafka-0-10的任何消息

时间:2018-10-30 15:20:14

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

我正在使用CDH(hadoop的cloudera分发)中的kafka 1.0.1-kafka-3.1.0-SNAPSHOT

在我的批次1边缘服务器上,我可以使用以下命令生成消息:

kafka-console-producer --broker-list batch-1:9092 --topic MyTopic

我可以在第一个节点上使用Zookeeper来存储消息:

kafka-console-consumer --zookeeper data1:2181 --topic MyTopic --from-beginning

但是使用 bootstrap-server选项,我却一无所获:

kafka-console-consumer --bootstrap-server batch-1:9092 --topic MyTopic --from-beginning

问题是我在火花上使用kafka:

libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.3.0"

val df = spark.readStream
  .format("org.apache.spark.sql.kafka010.KafkaSourceProvider")
  .option("kafka.bootstrap.servers", "batch-1:9092")
  .option("subscribe", "MyTopic")
  .load()

println("Select :")

val df2 = df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)", "CAST(topic AS STRING)")
  .as[(String, String, String)]

println("Show :")

val query = df2.writeStream
  .outputMode("append")
  .format("console")
  .start()

query.awaitTermination()

我在边缘上做了export SPARK_KAFKA_VERSION=0.10。然后

spark2-submit --driver-memory 2G --jars spark-sql-kafka-0-10_2.11-2.3.0.cloudera4.jar --class "spark.streaming.Poc" poc_spark_kafka_2.11-0.0.1.jar

这迫使我使用 kafka.bootstrap.servers,它似乎已连接,但是我没有收到任何消息。

输出与带有kafka-console-consumer选项的--bootstrap-server相同:

18/10/30 16:11:48 INFO utils.AppInfoParser: Kafka version : 0.10.0-kafka-2.1.0
18/10/30 16:11:48 INFO utils.AppInfoParser: Kafka commitId : unknown
18/10/30 16:11:48 INFO streaming.MicroBatchExecution: Starting new streaming query.

然后什么都没有。 我应该连接到Zookeeper吗?怎么样 ?

是否存在版本冲突,而他们在这里说:“ https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html?结构化流+ Kafka集成指南(Kafka代理版本 0.10.0或更高版本)”?

我错过了什么?

1 个答案:

答案 0 :(得分:2)

解决方案

/var/log/kafka/kafka-broker-batch-1.log说:

2018-10-31 13:40:08,284 ERROR kafka.server.KafkaApis: [KafkaApi-51] Number of alive brokers '1' does not meet the required replication factor '3' for the offsets topic (configured via 'offsets.topic.replication.factor'). This error can be ignored if the cluster is starting up and not all brokers are up yet.

因此,我在群集节点上部署了 3个代理,且网关位于边缘,现在它可以与:

一起使用

kafka-console-producer --broker-list data1:9092,data2:9092,data3:9092 --topic Test

kafka-console-consumer --bootstrap-server data1:9092 --topic Test --from-beginning

火花也可以正常工作。