我有一个流媒体作业,它从kafka主题中读取数据。尝试将传入的数据写入数据库。从而实现mysql接收器。在做之前,我写了一个简单的接收器来测试流程。
它在我的本地环境中运行良好,但是当我在开发环境中运行它时,它会抛出SparkException: Exception thrown in awaitResult
。
我相信原因可能是开发环境中有更多来自kafka主题的数据。
Dataset<Row> stream = sparkSession.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", kafkaBootstrapServersString)
.option("subscribe", topic)
.option("startingOffsets", "latest")
.option("enable.auto.commit", false)
// .option("kafkaConsumer.pollTimeoutMs", "1000")
.option("maxOffsetsPerTrigger", 1000)
.load();
stream.writeStream().foreach(sink).start();
在开发环境中,流在控制台上可以正常打印。 console.stream.writeStream()。format(“ console”)。start();
SimpleSink:
public class SimpleSink extends ForeachWriter<Row> {
public SimpleSink() {
}
@Override
public boolean open(long partitionId, long version) {
System.out.println(">>>");
return true;
}
@Override
public void process(Row row) {
System.out.println("comes here");
//System.out.println(row.mkString(","));
}
@Override
public void close(Throwable errorOrNull) {
}
}
因为此代码可在我的笔记本电脑上正常工作,这意味着该代码很好。但是我不知道为什么在高级环境接收器中没有被调用。
是否有一种方法可以控制流入接收器的数据量?不知道这是否是问题,但这是我的理论。