是否可以为多个消费者使用相同的检查点位置?我们正在使用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)
如果我为多个消费者使用相同的检查点位置,是否会出现任何问题?我们有两个不同的消费者的原因是,两者都是不同的数据和不同的主题。
在检查点位置,是否要为每个主题偏移量创建单独的目录?
答案 0 :(得分:1)
在检查点位置,是否要创建单独的目录 对于每个主题偏移?
那会有问题。为检查点创建目录时,数据将按以下格式保存:
new Path(checkpointDir, PREFIX + checkpointTime.milliseconds)
PREFIX
为checkpoint-
的位置。你会看到类似的东西:
-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>