使用Spark将Kafka消息直接写入文件

时间:2015-10-22 06:24:34

标签: apache-spark apache-kafka spark-streaming

对于一个类项目,我需要一个Spark Java程序作为Kafka使用者进行监听,并将所有Kafka主题收到的消息写入文件(例如“/user/zaydh/my_text_file.txt”)。

我能够以JavaPairReceiverInputDStream对象的形式接收消息;我也可以将它转换为JavaDStream<String>(这来自Spark Kafka示例)。

但是,我找不到一个好的Java语法来将这些数据写入基本上是单个日志文件的内容。我尝试在foreachRDD对象上使用JavaDStream,但我找不到一种干净,并行安全的方法将其下沉到单个日志文件中。

我知道这种方法是非传统的或非理想的,但这是一项要求。非常感谢任何指导。

1 个答案:

答案 0 :(得分:1)

当你想到一个流时,你必须把它想象成不会停止发布数据的东西。 因此,如果Spark流有一种方法来保存所有进入单个文件的RDD,它会继续增长到一个巨大的大小(并且流不应该停止记住?:)) 但在这种情况下,您可以使用RDD的saveAsTextFile实用程序, 这会在输出目录中创建多个文件,具体取决于创建流式上下文时指定的批处理间隔JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1))

然后,您可以使用how-to-merge-all-text-files-in-a-directory-into-one

之类的内容将这些文件部分合并为一个