我有生产者线程将数据推送到Kafka主题中,还有一个消费者线程一次轮询每个项目。这是使用者配置:
private final KafkaConsumer<Long, Integer> consumer;
public static final String TOPIC = "requestsss";
{
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KAFKA_BROKERS);
props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID_CONFIG);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName());
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class.getName());
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, MAX_POLL_RECORDS);
consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList(TOPIC));
}
使用者在循环中运行以下代码:
ConsumerRecords<Long, Integer> consumerRecords = consumer.poll(Duration.ofMillis(10000));
consumer.commitSync();
return consumerRecords.records(TOPIC).iterator().next().value();
然后,使用方进程将在没有使用所有产生的消息的情况下停止。问题在于,当它重新启动时,它不会从它离开的地方继续该过程;而是就像所有消息在上一次运行中都被消耗一样。
有人知道我在做什么错吗?
注意:我也尝试设置
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
设置为true和false,并删除consumer.commitSync()
,但均未产生预期的效果。
谢谢您的帮助