Java Kafka使用者无法从其离开的地方恢复

时间:2019-04-10 14:08:08

标签: java apache-kafka

我有生产者线程将数据推送到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(),但均未产生预期的效果。

谢谢您的帮助

0 个答案:

没有答案