我正在使用Kafka作为接收器进行火花结构化流式传输。 我正在运行以下代码
ds.selectExpr("topic", "CAST(key AS STRING)", "CAST(value AS STRING)")
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("checkpointLocation", "/tmp/checkpoint1")
.start()
.awaitTermination()
将“主题”列作为发布数据的主题。在我的应用程序中,我在写流之后删除了该主题。 但只要Spark将下一批写入水槽。它将再次创建所有主题。
例如批次1(数据集)
+ ---------- +
|主题|
+ ---------- +
| test375636 |
| test1234 |
+ ---------- +
spark将此批处理写入主题,然后我的应用程序删除主题 因此Kafka在列表中没有主题。
但是有第二批
+ ---------- +
|主题|
+ ---------- +
| test3245 |
+ ---------- +
spark还将查找主题test375636和test1234的元数据。 因此,它再次创建了这些主题。 如果我将代理设置更改为auto.create.topics.enable = false,则火花引发错误
18/08/07 14:11:49 WARN NetworkClient:提取关联ID为255的元数据时出错:{test880703 = UNKNOWN_TOPIC_OR_PARTITION,test1234 = UNKNOWN_TOPIC_OR_PARTITION,test375636}
我的要求是,一旦火花将数据写入流(Kafka接收器)。它不应再次查找主题的元数据。