Hello Sir/Madam,


    I am using spark streaming and kafka java API. And I want to know if there 
is any method to commit OffsetRanges except for `commitAsync`. The problem is: 
I made some modification on the OffsetRanges, and I commit it using 
`commitAsync` method, however, the modification seems not committed 
successfully.



-----------------------------------------------------------------------------------------------------------------------------------------------------------

    For Example:

    in this batch(batch 10):

    OffsetRange o = OffsetRanges[0]

    o.fromOffset = 112233, o.untilOffset = 112244

    I made a modification so that

    o.fromOffset = 112233, o.untilOffset = 112234

    and I commit the offset ranges using commitAsync



    but in next batch(batch 11)

    I expect o.fromOffset = 112234, however o.fromOffset = 112244 actually (so 
the modification seems not committed successfully)

-----------------------------------------------------------------------------------------------------------------------------------------------------------



    Here are some related code:(I am using org.apache.spark (version 2.3.0) and 
org.apache.kafka(0.10))



```java

JavaStreamingContext jsc = JavaStreamingContext.getOrCreate(checkpoint, () -> {


    JavaStreamingContext streamingContext = new 
JavaStreamingContext(sparkContext, Durations.milliseconds(1000));
    streamingContext.checkpoint(checkpoint);
    List<String> topics = new ArrayList<>("a");
    String consumerGroupId = "a_comsumer_group";


    Map<String, Object> kafkaParams = new HashMap<>();
        kafkaParams.put("key.deserializer", StringDeserializer.class);
        kafkaParams.put("value.deserializer", StringDeserializer.class);
        kafkaParams.put("bootstrap.servers", String.join(",", "broker_name"));
        kafkaParams.put("group.id", consumerGroupId);
        kafkaParams.put("auto.offset.reset", "latest");
        kafkaParams.put("enable.auto.commit", "false");


    JavaDStream<ConsumerRecord<String, String>> kafkaStream = 
KafkaUtils.createDirectStream(streamingContext, 
LocationStrategies.PreferConsistent(),
                ConsumerStrategies.<String, String>Subscribe(topics, 
kafkaParams));


    kafkaStream.foreachRDD(rdd -> {
        OffsetRange[] offsetRanges = ((HasOffsetRanges) 
rdd.rdd()).offsetRanges();





// I made some changes to the offsetRanges


        ((CanCommitOffsets) kafkaStream).commitAsync(offsetRanges);
    });
}
```

Thanks a lot. :)





Best Regards,

Fangyuan


Reply via email to