Spark Streaming:如果有大量数据,则不会启动Foreach写入

时间:2018-10-08 20:29:38

标签: java apache-spark spark-streaming

我有一个流媒体作业,它从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) {
    }

}

因为此代码可在我的笔记本电脑上正常工作,这意味着该代码很好。但是我不知道为什么在高级环境接收器中没有被调用。

是否有一种方法可以控制流入接收器的数据量?不知道这是否是问题,但这是我的理论。

0 个答案:

没有答案