Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 春季卡夫卡:按顺序阅读两个不同的主题_Java_Apache Kafka_Spring Kafka - Fatal编程技术网

Java 春季卡夫卡:按顺序阅读两个不同的主题

Java 春季卡夫卡:按顺序阅读两个不同的主题,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,Spring Kafka有可能以保证的顺序阅读不同消费者的两个不同主题吗?例如,主题A存储与确定如何处理存储在主题B中的数据相关的信息。主题A被读入内存并被引用,但在从主题B读入数据之前需要完全填充。下面是我当前设置的示例 @Service public class TopicA { @KafkaListener(topics = "topicA") public void consume(ConsumerRecord<String, byte[]> record) {

Spring Kafka有可能以保证的顺序阅读不同消费者的两个不同主题吗?例如,主题A存储与确定如何处理存储在主题B中的数据相关的信息。主题A被读入内存并被引用,但在从主题B读入数据之前需要完全填充。下面是我当前设置的示例

@Service
public class TopicA {
  @KafkaListener(topics = "topicA")
  public void consume(ConsumerRecord<String, byte[]> record) {
    // ... some code here to populate an in-memory data structure
  }
}
@服务
公共类话题{
@卡夫卡列斯汀(topics=“topicA”)
公共无效消费(消费者记录记录){
//…此处的一些代码用于填充内存中的数据结构
}
}
@服务
公共类主题{
@卡夫卡列斯汀(topics=“topicB”)
公共无效消费(消费者记录记录){
//…此处的一些代码取决于主题A,它们填充了内存中的数据结构
}
}
到目前为止,我一直倾向于创建一个Spring启动过程(使用@PostConstruct),该过程通过首先阅读主题a来初始化数据结构,但一直未能实现。有人有什么建议吗?提前谢谢

@KafkaListener(id = "bConsumer" topics = "topicB", autoStartup = "false")

然后自动连接
KafkaListenerEndpointRegistry
bean和
registry.getListenerContainer(“bConsumer”).start()当您准备好时。

听起来您应该将主题A设置为一个KTable,并且您希望将数据连接到该KTable上,并且BSo
KafkaListenerEndpointRegistry
将自动连接到
topicA
类中,并且只有在完全填充数据结构后才会启动主题B使用者?你有什么建议让我知道卡夫卡的主题已经被完全阅读了吗?我总是从一开始就使用ConsumerSekCallback.seekToBegining()
进行读取。您可以设置容器的
idleEventInterval
,并在间隔过去而未收到任何新记录时使用
ListenerContainerIdleEvent
。您可以通过实现
ApplicationListener
或添加
@EventListener
方法来使用事件。见和。
@KafkaListener(id = "bConsumer" topics = "topicB", autoStartup = "false")