假设一个DataStreamReader
配置为订阅多个主题(请参见here):
// Subscribe to multiple topics
spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1,topic2,topic3")
在此之上使用foreachBatch
时,批次将包含什么?
在我的用例中,我只想批量处理来自一个主题的消息。可以配置吗?
答案 0 :(得分:3)
在Structured Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or higher)中引用官方文档:
//订阅多个主题
... .option("subscribe", "topic1,topic2")
上面的代码是基础的(流查询的)Kafka使用者订阅的内容。
当我在此之上使用foreachBatch时,这些批次将包含什么?
- 每个批次将仅包含来自一个主题的消息?
那是正确的答案。
我想批量处理仅来自一个主题的消息。可以配置吗?
Structured Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or higher)中也有记录:
源代码中的每一行都具有以下架构:
...
主题
换句话说,输入数据集将具有topic
列,其中包含给定行(记录)所来自的主题的名称。
要使“仅接收来自一个主题的邮件” ,您只需filter
或where
带有一个主题,例如
val messages: DataFrame = ...
assert(messages.isStreaming)
messages
.writeStream
.foreachBatch { case (df, batchId) =>
val topic1Only = df.where($"topic" === "topic1")
val topic2Only = df.where($"topic" === "topic2")
...
}
答案 1 :(得分:1)
该批处理将包含来自您的消费者已订阅的所有主题(我要说是分区)的消息。