繁体   English   中英

Pyspark Structured Streaming Kafka 配置错误

[英]Pyspark Structured Streaming Kafka configuration error

我之前已经成功地将 pyspark 用于 Spark Streaming (Spark 2.0.2) 和 Kafka (0.10.1.0),但我的目的更适合结构化流。 我尝试在线使用该示例: https : //spark.apache.org/docs/2.1.0/structured-streaming-kafka-integration.html

使用以下类似代码:

ds1 = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .load()
query = ds1
  .writeStream
  .outputMode('append')
  .format('console')
  .start()
query.awaitTermination() 

但是,我总是以以下错误告终:

: org.apache.kafka.common.config.ConfigException: 
Missing required configuration "partition.assignment.strategy" which has no default value

我还尝试在创建 ds1 时将其添加到我的选项集中:

.option("partition.assignment.strategy", "range")

但即使明确地为其分配一个值也不能阻止错误,我可以在网上或 Kafka 文档中找到的任何其他值(如“roundrobin”)也没有。

我还使用“assign”选项尝试了这一点并实现了相同的错误(我们的 Kafka 主机设置为分配——每个消费者只分配一个分区,我们没有任何重新平衡)。

知道这里发生了什么吗? 该文档没有帮助(可能是因为它仍处于实验阶段)。 另外,是否有使用 KafkaUtils 进行结构化流处理? 或者这是唯一的网关?

  1. Kafka 0.10.1.* 客户端存在一个已知问题,您不应该将它与 Spark 一起使用,因为它可能会由于https://issues.apache.org/jira/browse/KAFKA-4547产生错误的答案。 您可以使用 0.10.0.1 客户端,它应该可以与 0.10.1.* Kafka 集群一起使用。

  2. 要将 Kafka 配置发送到 Structured Streaming 中的 Kafka 消费者客户端,您需要添加kafka. 前缀,例如.option("kafka.partition.assignment.strategy", "range") 但是,您不需要设置kafka.partition.assignment.strategy因为它有一个默认值。 我的预感是您可能将 Kafka 0.8.* 和 0.10.* jars 放在类路径上并加载了错误的类。

  3. 您想使用 KafkaUtils 中的哪个 API 但在 Structured Streaming 中没有? Spark 2.2.0 刚刚发布,您可以在 Structured Streaming 中对 Kafka 使用批处理或流查询。 阅读http://spark.apache.org/docs/2.2.0/structured-streaming-kafka-integration.html以获取示例。

kafka-clients-*.jar添加到您的 spark jar 文件夹,然后重新启动 spark master 和 worker。 那么你不需要添加.option("partition.assignment.strategy", "range")

我在 Spark 2.3.2 中使用结构化流时遇到了这个问题。 就像@bruce.liu 在他的回答中暗示的那样,当 Spark 的 JVM 的类路径中没有 kafka-clients....jar 文件时,就会发生这种情况。

我通过下载 kafka-clients jar ( https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients/0.10.0.1 ) 来修复它,然后使用--jars--driver-class-path将它提供给 spark-submit --driver-class-path选项。

像这样的东西:

spark-submit --class MainClass --master local[*] --jars local:///root/sources/jars/kafka-clients-0.10.0.1.jar --driver-class-path local:///root/sources/jars/kafka-clients-0.10.0.1.jar app.jar

之前,我一直成功地将pyspark与Kafka(0.10.1.0)一起用于Spark Streaming(Spark 2.0.2),但是我的目的更适合于结构化流。 我尝试在线使用示例: https//spark.apache.org/docs/2.1.0/structured-streaming-kafka-integration.html

使用以下类似代码:

ds1 = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .load()
query = ds1
  .writeStream
  .outputMode('append')
  .format('console')
  .start()
query.awaitTermination() 

但是,我总是会遇到以下错误:

: org.apache.kafka.common.config.ConfigException: 
Missing required configuration "partition.assignment.strategy" which has no default value

创建ds1时,我还尝试将其添加到我的选项集中:

.option("partition.assignment.strategy", "range")

但是,即使显式地为其分配值也不能停止错误,我也不能在网上或在Kafka文档中找到任何其他值(例如“ roundrobin”)。

我还使用“ assign”选项尝试了此操作,并遇到了相同的错误(我们的Kafka主机设置为进行分配-每个使用者仅分配了一个分区,而我们没有任何重新平衡)。

知道这里发生了什么吗? 该文档没有帮助(可能因为它仍处于实验阶段)。 另外,是否还有使用KafkaUtils进行结构化流式传输的方法? 还是这是唯一的网关?

暂无
暂无

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

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