暂停Spark Kafka Direct Stream

时间:2016-08-30 20:43:25

标签: apache-spark streaming apache-kafka

我有以下代码,使用Kafka连接器为Spark创建直接流。但是我想处理一种情况,我可以决定这种流式传输需要在有条件的基础上暂停一段时间,有没有办法实现这一目标? 假设我的Kafka正在进行一些维护,所以在上午10点到12点之间停止处理,然后在上次偏移的12点再次接收,我该怎么做?

final JavaInputDStream<KafkaMessage> msgRecords = KafkaUtils.createDirectStream(
            jssc, String.class, String.class, StringDecoder.class, StringDecoder.class,
            KafkaMessage.class, kafkaParams, topicsPartitions,
            message -> {
                return KafkaMessage.builder()
                        .
                        .build();
            }
    );

1 个答案:

答案 0 :(得分:0)

有两种方法:

  • 在您希望处理停止的时间内停止spark上下文(来自单独的时间监视线程),并在需要处理恢复时启动它们。这最适合大间隔(大约几小时)。就Spark利用率而言,这是高效,因此您不会无用地占用Spark群集中的插槽。
  • 检索转换的spark批处理时间,并以批处理时间为条件,决定是否继续进行转换的其余部分。不幸的是,获取Spark批处理时间并非易事;如果您更改DStream API以将批处理时间作为转换API的一部分输入,则可以使用它。