我有一个简单的结构化流应用程序,该应用程序仅从一个Kafka主题读取数据并写入另一个主题。
SparkConf conf = new SparkConf()
.setMaster("local[*]")
.setAppName("test");
SparkSession spark = SparkSession
.builder()
.config(conf)
.getOrCreate();
Dataset<Row> dataset = spark
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "start")
.load();
StreamingQuery query = dataset
.writeStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("checkpointLocation", "checkpoint")
.option("topic", "end")
.start();
query.awaitTermination(20000);
在主题start
上有两条消息要处理。这段代码毫无例外地运行,但是最终没有消息出现在主题end
上。这个例子怎么了?
答案 0 :(得分:0)
问题在于消息已经在流中,并且起始偏移量未设置为“最早”。
Dataset<Row> dataset = spark
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", start.getTopicName())
.option("startingOffsets", "earliest")
.load();