如何在重新启动时使Spark消耗掉先前的偏移量?

时间:2016-11-03 07:44:00

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

我使用Spark来使用Kafka的数据。在消耗了一些数据后重新启动Spark时,如何确保Spark将从它停止的偏移开始消耗?

例如,如果第一次运行时,Spark消耗了直到偏移标识x。如何确保在下次运行时它将以偏移标识x+1开始?

SparkConf sparkConf = new SparkConf().setAppName("name");
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(2000));
Map<String,String> kafkaParams = new HashMap<>();
kafkaParams.put("zookeeper.connect", "127.0.0.1");
kafkaParams.put("group.id", App.GROUP);
JavaPairReceiverInputDStream<String, EventLog> messages =
  KafkaUtils.createStream(jssc, String.class, EventLog.class, StringDecoder.class, EventLogDecoder.class,
    kafkaParams, topicMap, StorageLevel.MEMORY_AND_DISK_SER_2());

1 个答案:

答案 0 :(得分:1)

在基于接收器的方法中(您通过KafkaUtils.createStream使用),偏移量由WAL (Write Ahead Log)保存和处理,Direct (receiverless) API streaming approach负责从适当的偏移量恢复您的应用程序。如果您希望能够准确控制从中恢复申请的位置,请查看KafkaUtils.createDStream以及{{3}}并重载fromOffsets: Map[TopicAndPartition, Long]