Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Apache kafka Kafka Streams持久存储错误:状态存储可能已迁移到另一个实例_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka Kafka Streams持久存储错误:状态存储可能已迁移到另一个实例

Apache kafka Kafka Streams持久存储错误:状态存储可能已迁移到另一个实例,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我正在使用带有Spring Boot的Kafka Streams。在我的用例中,当我从其他微服务接收到客户事件时,我需要将其存储在客户物化视图中,当我接收到订单事件时,我需要加入客户和订单,然后将其存储在客户订单物化视图中。为了实现这一点,我创建了持久性键值存储客户存储和 状态存储通常需要一些时间来准备。最简单的方法如下所示。(官方文件中的代码) public static T waitUntilStoreIsQueryable(最终字符串storeName, 最终QueryableStoreT

我正在使用带有Spring Boot的Kafka Streams。在我的用例中,当我从其他微服务接收到客户事件时,我需要将其存储在客户物化视图中,当我接收到订单事件时,我需要加入客户和订单,然后将其存储在客户订单物化视图中。为了实现这一点,我创建了持久性键值存储客户存储


状态存储通常需要一些时间来准备。最简单的方法如下所示。(官方文件中的代码)

public static T waitUntilStoreIsQueryable(最终字符串storeName,
最终QueryableStoreType QueryableStoreType,
最终KafkaStreams(流)抛出InterruptedException{
while(true){
试一试{
return streams.store(storeName,queryableStoreType);
}捕获(已忽略InvalidStateStoreException){
//存储尚未准备好进行查询
睡眠(100);
}
}
}
您可以在文档中找到其他信息。

状态存储通常需要一些时间来准备。最简单的方法如下所示。(官方文件中的代码)

public static T waitUntilStoreIsQueryable(最终字符串storeName,
最终QueryableStoreType QueryableStoreType,
最终KafkaStreams(流)抛出InterruptedException{
while(true){
试一试{
return streams.store(storeName,queryableStoreType);
}捕获(已忽略InvalidStateStoreException){
//存储尚未准备好进行查询
睡眠(100);
}
}
}
您可以在文档中找到其他信息。

为什么不使用
join()
操作符?我从leftJoin开始,忘了用
join()替换。我将把它改为join。为什么不使用
join()
操作符呢?我从leftJoin开始,忘了替换为
join()
。我会将其更改为join。我试图使用您的代码,但出现以下异常java.lang.IllegalStateException:KafkaStreams未运行。状态为错误。调用streams.start()后是否调用了上述方法?是。请看第140行的测试类,我关闭了IDE并打开了它。现在,我看到我的代码永远停留在
waitUntilStoreIsQueryable()
方法上。我觉得这可能是在confluenct 4.0+、kafka 1.10中引入的,因为我看到了类似的问题,但只适用于订阅多个连接主题的流。它永远找不到这些类型的流的存储;其他溪流也不错。如果我擦除日志、存储、偏移和重新启动,工作正常。虽然我试图使用您的代码,但这不是一个解决方案,但我得到了以下异常java.lang.IllegalStateException:KafkaStreams未运行。状态为错误。调用streams.start()后是否调用了上述方法?是。请看第140行的测试类,我关闭了IDE并打开了它。现在,我看到我的代码永远停留在
waitUntilStoreIsQueryable()
方法上。我觉得这可能是在confluenct 4.0+、kafka 1.10中引入的,因为我看到了类似的问题,但只适用于订阅多个连接主题的流。它永远找不到这些类型的流的存储;其他溪流也不错。如果我擦除日志、存储、偏移和重新启动,工作正常。但这不是一个解决方案
    StoreBuilder customerStateStore = Stores.keyValueStoreBuilder(Stores.persistentKeyValueStore("customer"),Serdes.String(), customerSerde).withLoggingEnabled(new HashMap<>());
streamsBuilder.addStateStore(customerStateStore);
KTable<String,Customer> customerKTable=streamsBuilder.table("customer",Consumed.with(Serdes.String(),customerSerde));
    customerKTable.foreach(((key, value) -> System.out.println("Customer from Topic: "+value)));
streams.start();
ReadOnlyKeyValueStore<String, Customer> customerStore = streams.store("customer", QueryableStoreTypes.keyValueStore());
System.out.println("customerStore.approximateNumEntries()-> " + customerStore.approximateNumEntries());
org.apache.kafka.streams.errors.InvalidStateStoreException: the state store, customer, may have migrated to another instance.
    at org.apache.kafka.streams.state.internals.QueryableStoreProvider.getStore(QueryableStoreProvider.java:60)
    at org.apache.kafka.streams.KafkaStreams.store(KafkaStreams.java:1043)
    at com.kafkastream.service.EventsListener.main(EventsListener.java:94)
public static <T> T waitUntilStoreIsQueryable(final String storeName,
                                              final QueryableStoreType<T> queryableStoreType,
                                              final KafkaStreams streams) throws InterruptedException {
  while (true) {
    try {
      return streams.store(storeName, queryableStoreType);
    } catch (InvalidStateStoreException ignored) {
      // store not yet ready for querying
      Thread.sleep(100);
    }
  }
}