Java 手动启动Kafka侦听器后无法查找

Java 手动启动Kafka侦听器后无法查找,java,spring,spring-boot,apache-kafka,spring-kafka,Java,Spring,Spring Boot,Apache Kafka,Spring Kafka,我有一个用例,其中我有一个API来启动卡夫卡侦听器(@KafkaListener)。然后,对于卡夫卡侦听器,我将其当前偏移量修改为给定偏移量。但是,在启动侦听器并调用seek方法之后,偏移量并没有改变。我认为它显示了一些异步行为。我正在使用一个线程。在两者之间使用sleep(1000),然后它就可以工作了 我有两个问题- 有没有办法避免“线程。睡眠” 另外,我可以只为一些主题启动我的侦听器吗 (当前,如果我启动我的侦听器,它将侦听所有主题) 代码 public void startListene

我有一个用例,其中我有一个API来启动卡夫卡侦听器(@KafkaListener)。然后,对于卡夫卡侦听器,我将其当前偏移量修改为给定偏移量。但是,在启动侦听器并调用seek方法之后,偏移量并没有改变。我认为它显示了一些异步行为。我正在使用一个
线程。在两者之间使用sleep(1000)
,然后它就可以工作了

我有两个问题-

  • 有没有办法避免“线程。睡眠”
  • 另外,我可以只为一些主题启动我的侦听器吗
  • (当前,如果我启动我的侦听器,它将侦听所有主题)

    代码

    public void startListener(String topic, int partition, long offset) {
          this.kafkaListenerEndpointRegistry.start();
          try {
              Thread.sleep(1000);
          } catch (InterruptedException e) {
              log.error(e.getMessage(), e);
          }
          seekByOffset(topic, partition, offset);
      }
    
    public boolean seekByOffset(String topic, int partition, long offset) {
        final boolean[] flag = new boolean[1];
        this.getCallbacksAndTopics()
            .forEach(
                (cb, topicPartitions) -> {
                  for (TopicPartition topicPartition : topicPartitions) {
                    if (topic.equals(topicPartition.topic())
                        && partition == topicPartition.partition()) {
                      cb.seek(topic, partition, offset);
                      flag[0] = true;
                    }
                  }
                });
        return flag[0];
      }