我已经建立了一个从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。
答案 0 :(得分:0)
回答我自己的问题。 Kafka使用者每metadata.max.age.ms
(默认值为300000
(5分钟)检查是否有新的分区/主题(如果使用模式订阅主题)。
由于我的测试持续时间远不止于此,所以我不会注意到更新。对于测试,请将值减小到较小的值,例如通过设置DataStreamReader
的以下选项可以达到100毫秒:
.option("kafka.metadata.max.age.ms", 100)