Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有显式轮询的Vertx Kafka自动提交_Java_Apache Kafka_Rx Java2_Kafka Consumer Api_Vert.x - Fatal编程技术网

Java 带有显式轮询的Vertx Kafka自动提交

Java 带有显式轮询的Vertx Kafka自动提交,java,apache-kafka,rx-java2,kafka-consumer-api,vert.x,Java,Apache Kafka,Rx Java2,Kafka Consumer Api,Vert.x,一直在尝试使用Vertx用java编写kafka consumer 我需要将自动提交设置为false(特定用例) 下面是执行显式轮询的代码 consumer.subscribe("test", ar -> { if (ar.succeeded()) { System.out.println("Consumer subscribed"); vertx.setPeriodic(1000, timerId -> { consumer.poll(100, ar1 -> {

一直在尝试使用Vertx用java编写kafka consumer

我需要将自动提交设置为false(特定用例)

下面是执行显式轮询的代码

consumer.subscribe("test", ar -> {

if (ar.succeeded()) {
System.out.println("Consumer subscribed");

vertx.setPeriodic(1000, timerId -> {

  consumer.poll(100, ar1 -> {

    if (ar1.succeeded()) {

      KafkaConsumerRecords<String, String> records = ar1.result();
      for (int i = 0; i < records.size(); i++) {
        KafkaConsumerRecord<String, String> record = records.recordAt(i);
        System.out.println("key=" + record.key() + ",value=" + record.value() +
          ",partition=" + record.partition() + ",offset=" + record.offset());
      }
    }
  });

});
我的问题是,如果轮询频率设置为1000ms,并且提交是手动的,那么如果消息未在1000ms内处理,会发生什么情况


是否在处理第一组消息之前进行下一次轮询?如果是,它会再次获取同一组消息(尚未提交)还是一组较新的消息?

查看以下文档:

在每次轮询中,使用者将尝试使用上次使用的偏移量作为起始偏移量,并按顺序提取。最后消耗的偏移量可以通过seek(TopicPartition,long)手动设置,也可以自动设置为订阅的分区列表的最后提交偏移量


最后消耗的偏移量指的是
KafkaConsumer
的内部状态,而不是它提交的状态。这意味着它不会再次获取相同的消息,但会获取下一个100条消息。

查看以下文档:

在每次轮询中,使用者将尝试使用上次使用的偏移量作为起始偏移量,并按顺序提取。最后消耗的偏移量可以通过seek(TopicPartition,long)手动设置,也可以自动设置为订阅的分区列表的最后提交偏移量

最后消耗的偏移量指的是
KafkaConsumer
的内部状态,而不是它提交的状态。这意味着它不会再次获取相同的消息,但会获取下一个100条消息

consumer.commit(ar -> {

 if (ar.succeeded()) {
 System.out.println("Last read message offset committed");
 }
 });