Java 如何从Kafka主题中获取记录总数并保存到HDFS中?

Java 如何从Kafka主题中获取记录总数并保存到HDFS中?,java,apache-spark,hadoop,apache-kafka,spark-streaming-kafka,Java,Apache Spark,Hadoop,Apache Kafka,Spark Streaming Kafka,全部, 我正在将卡夫卡的数据转储到HDFS中。我能够使用数据,并希望从Kafka获取记录总数,并将其另存为HDFS中的文件,以便使用该文件进行验证。我可以在控制台中打印记录,但我不确定如何创建total count的文件 从卡夫卡提取记录的查询: Dataset ds1=ds.filter(args[5]); StreamingQuery query = ds1 .coalesce(10) .writeStream()

全部,

我正在将卡夫卡的数据转储到HDFS中。我能够使用数据,并希望从Kafka获取记录总数,并将其另存为HDFS中的文件,以便使用该文件进行验证。我可以在控制台中打印记录,但我不确定如何创建total count的文件

从卡夫卡提取记录的查询:

Dataset ds1=ds.filter(args[5]);
 StreamingQuery query = ds1
                   .coalesce(10)
                   .writeStream()
                   .format("parquet")
                   .option("path", path.toString())
                   .option("checkpointLocation", args[6] + "/checkpoints" + args[2])
                   .trigger(Trigger.Once())
                   .start();

          try {
                query.awaitTermination();
            } catch (StreamingQueryException e) {
                e.printStackTrace();
                System.exit(1);
            }   
以及我为获取记录并在控制台中打印而编写的代码:

Dataset stream=ds1.groupBy(“”.count()
//实际上,我想在不使用GroupBy的情况下获取计数,我尝试了
long stream=ds1.count()
,但遇到了错误

 StreamingQuery query1=stream.coalesce(1)
                        .writeStream()
                        .format("csv")
                       .option("path", path + "/record")
                       .start();

               try {
                    query1.awaitTermination();
                 } catch (StreamingQueryException e) {
                     e.printStackTrace();
                    System.exit(1);
                } 

这不起作用,你能帮我解决这个问题吗?

主题中任何时候的记录数都是一个移动的目标

您需要使用旧的Spark Streaming来查找每个Spark partiton批次的记录数,然后使用
累加器来计算所有已处理的记录,但这将是您所能获得的最接近的记录数

Spark+Kafka据称具有完全一次性的处理语义,因此我建议您将重点放在错误捕获和监视上,而不仅仅是计数验证