我一直在使用Spark / Spark-Streaming开发应用程序,但到目前为止总是使用HDFS进行文件存储。但是,我已经到了一个我正在探索的阶段,如果可以在没有HDFS的情况下完成(在生产中,全天候运行)。我试过通过Spark用户组筛选但到目前为止还没有找到任何具体的答案。请注意,我使用 updateStateByKey 来使用检查点和有状态流处理。
答案 0 :(得分:1)
根据流式传输(我一直在使用Kafka),您不需要使用检查点等。
自从火花1.3以来,他们已经实施了直接的方法,并带来了很多好处。
简化并行:无需创建多个输入Kafka流 和他们结合。使用directStream,Spark Streaming将创建为 许多RDD分区因为要使用Kafka分区,所以 将同时从Kafka读取数据。所以有一对一的 Kafka和RDD分区之间的映射,这更容易 理解和调整。
效率:在第一种方法中实现零数据丢失 要存储在Write Ahead Log中的数据,该日志进一步复制 数据。这实际上是低效的,因为数据有效地得到了 重复了两次 - 一次是卡夫卡,第二次是写在前面 日志。第二种方法消除了问题,因为没有 接收器,因此不需要写入日志。
恰好一次语义:第一种方法使用Kafka的高级API 在Zookeeper中存储消耗的偏移量。这是传统的方式 使用Kafka的数据。虽然这种方法(与...结合) 写入日志)可以确保零数据丢失(即至少一次 语义),一些记录可能被消耗的可能性很小 一些失败后两次。这是因为不一致而发生的 在Spark Streaming可靠接收的数据和跟踪的偏移之间 由Zookeeper。因此,在第二种方法中,我们使用简单的Kafka API 不使用Zookeeper和仅由Spark跟踪的偏移量 在其检查点内流式传输。这消除了不一致性 在Spark Streaming和Zookeeper / Kafka之间,所以每个记录都是 尽管失败,Spark Streaming有效地接收了一次。
如果您使用的是Kafka,可以在此处找到更多信息: https://spark.apache.org/docs/1.3.0/streaming-kafka-integration.html
方法2。