Java 带有显式轮询的Vertx Kafka自动提交
一直在尝试使用Vertx用java编写kafka consumer 我需要将自动提交设置为false(特定用例) 下面是执行显式轮询的代码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 -> {
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");
}
});