使用Kafka源进行Spark结构化流式处理,在查询运行时更改主题分区的数量

时间:2019-11-08 00:57:56

标签: apache-spark apache-kafka partitioning spark-structured-streaming spark-streaming-kafka

我已经建立了一个从Kafka主题读取的Spark结构化流查询。 如果在运行Spark查询时更改了主题中的分区数,则Spark似乎不会注意到,并且新分区上的数据也不会被使用。

除了停止查询并重新启动查询之外,是否有办法告诉Spark在同一主题中检查新分区?

编辑: 我正在使用Spark 2.4.4。我从卡夫卡读到的内容如下:

spark
      .readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", kafkaURL)
      .option("startingOffsets", "earliest")
      .option("subscribe", topic)
      .option("failOnDataLoss", value = false)
      .load()

经过一些处理后,我在Delta Lake表上写入HDFS。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。 Kafka使用者每metadata.max.age.ms(默认值为300000(5分钟)检查是否有新的分区/主题(如果使用模式订阅主题)。

由于我的测试持续时间远不止于此,所以我不会注意到更新。对于测试,请将值减小到较小的值,例如通过设置DataStreamReader的以下选项可以达到100毫秒:

.option("kafka.metadata.max.age.ms", 100)