Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 通过spark结构阅读多个卡夫卡主题不起作用?_Apache Spark_Apache Kafka_Spark Structured Streaming - Fatal编程技术网

Apache spark 通过spark结构阅读多个卡夫卡主题不起作用?

Apache spark 通过spark结构阅读多个卡夫卡主题不起作用?,apache-spark,apache-kafka,spark-structured-streaming,Apache Spark,Apache Kafka,Spark Structured Streaming,我正试图通过使用structure streaming从多个卡夫卡主题中读取数据。 版本 卡夫卡-2.12-1.0.0 火花结构流-2.2.1 我的代码:- val spark = SparkSession .builder() .appName("StreamLocallyExample") .config("spark.master", "local") .config("spark.sql.streaming.checkpointLocat

我正试图通过使用structure streaming从多个卡夫卡主题中读取数据。 版本 卡夫卡-2.12-1.0.0 火花结构流-2.2.1

我的代码:-

val spark = SparkSession
      .builder()
      .appName("StreamLocallyExample")
      .config("spark.master", "local")
       .config("spark.sql.streaming.checkpointLocation", "path/XXYY")
       .getOrCreate()

    val kafkaStreamDF = sparkSession.readStream.format("kafka")
          .option("kafka.bootstrap.servers", "localhost:9092")
          .option("subscribe", "test,trial")
          .load()

    val df=kafkaStreamDF.selectExpr("CAST(value AS string)")

    val query=df.writeStream .outputMode("append")
                .format("console")
                .option("truncate","false")
                .start()

    query.awaitTermination()
在上面,我有两个卡夫卡主题(测试,试用)。当我运行这个程序时,我只能使用来自试用主题的消息。不能使用来自测试主题的消息

我没有收到任何错误,程序运行正常。谁能帮帮我吗


谢谢

如Maverik所述,请确保所有主题都收到数据。在具有多个主题的单个流中,主题按顺序逐个读取

您可以使用以下配置在使用者端启用并行性

conf.set("spark.streaming.concurrentJobs", "2");
默认情况下,并发作业的数量为1,这意味着一次只有1个作业处于活动状态,并且在其未完成之前,其他作业将排队,即使资源可用且空闲

http://stackoverflow.com/questions/23528006/how-jobs-are-assigned-to-executors-in-spark-streaming .

运行并发作业可以减少处理时间和调度延迟,即使批处理的处理时间略多于批处理间隔

SparkConf conf = new SparkConf().setAppName("Streaming");
conf.set("spark.streaming.concurrentJobs", "2");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaSparkContext sc = new JavaStreamingContext(sc, new Duration(1000));

kafkaParams.put("metadata.broker.list",
                "broker1:9092,broker2:9092,broker3:9092");
Set<String> topics = Collections.singleton("");

JavaPairInputDStream<String, String> directKafkaStream = KafkaUtils.createDirectStream(ssc, String.class,
                String.class, StringDecoder.class, StringDecoder.class, kafkaParams, topics);
SparkConf conf=new SparkConf().setAppName(“流媒体”);
conf.set(“spark.streaming.concurrentJobs”,“2”);
JavaSparkContext sc=新的JavaSparkContext(conf);
JavaSparkContext sc=新的JavaStreamingContext(sc,新的持续时间(1000));
kafkaParams.put(“metadata.broker.list”,
“经纪人1:9092,经纪人2:9092,经纪人3:9092”);
Set topics=Collections.singleton(“”);
JavaPairInputStream directKafkaStream=KafkaUtils.createDirectStream(ssc,String.class,
String.class、StringDecoder.class、StringDecoder.class、kafkaParams、topics);

资料来源:http://why-not-learn-something.blogspot.in/2016/06/spark-streaming-performance-tuning-on.html

您是否与kafka控制台使用者确认测试主题实际上正在流式传输?是的,能够通过kafka使用者读取测试主题消息。代码按预期工作。我只能假设您的检查点文件或其他基础设施存在问题。但是,按原样运行代码会返回预期的结果。你能试试4吗?你能得到这个运行时吗?getRuntime().availableProcessors();并检查有多少可用?您不能简单地增加数量。这完全取决于处理器的数量。这都是关于调度的。嗨,phani,Runtime.getRuntime().availableProcessors()返回4。