为多个消费者使用相同的检查点位置 - Spark直接流式传输

时间:2017-02-15 07:24:09

标签: scala spark-streaming kafka-consumer-api

是否可以为多个消费者使用相同的检查点位置?我们正在使用Direct Streaming方法。

代码示例:

ssc.checkpoint(checkpointDirectory)
val dstream1 = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicSet1).map(_._2)
val dstream2 = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicSet2).map(_._2)

如果我为多个消费者使用相同的检查点位置,是否会出现任何问题?我们有两个不同的消费者的原因是,两者都是不同的数据和不同的主题。

在检查点位置,是否要为每个主题偏移量创建单独的目录?

1 个答案:

答案 0 :(得分:1)

  

在检查点位置,是否要创建单独的目录   对于每个主题偏移?

那会有问题。为检查点创建目录时,数据将按以下格式保存:

new Path(checkpointDir, PREFIX + checkpointTime.milliseconds)

PREFIXcheckpoint-的位置。你会看到类似的东西:

-rw-r--r-- 1 spark spark 9434 Feb 14 17:59 checkpoint-1487095188000
-rw-r--r-- 1 spark spark 9456 Feb 14 17:59 checkpoint-1487095188000.bk
-rw-r--r-- 1 spark spark 9423 Feb 14 17:59 checkpoint-1487095192000
-rw-r--r-- 1 spark spark 9443 Feb 14 17:59 checkpoint-1487095192000.bk
-rw-r--r-- 1 spark spark 9426 Feb 14 17:59 checkpoint-1487095196000
-rw-r--r-- 1 spark spark 9446 Feb 14 17:59 checkpoint-1487095196000.bk

您可以看到我的批处理间隔为4000毫秒。

由于您的流在公共StreamingContext上运行,因此它们都使用相同的批处理间隔,并将尝试覆盖其他文件。更糟糕的是,您可能会错误地尝试在另一个内部恢复一个流数据。

为每个流使用单独的检查点目录。

  

如果我的单个消费者有多个主题怎么办?

如果您只有一个消费者,那么同一个StreamingContext负责检查与所有主题相关的所有内容,这是安全的,这样做应该没有问题。< / p>