Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 将StateRestoreListener与Spring Cloud Kafka Streams绑定器一起使用_Java_Spring_Apache Kafka_Apache Kafka Streams_Spring Cloud Stream - Fatal编程技术网

Java 将StateRestoreListener与Spring Cloud Kafka Streams绑定器一起使用

Java 将StateRestoreListener与Spring Cloud Kafka Streams绑定器一起使用,java,spring,apache-kafka,apache-kafka-streams,spring-cloud-stream,Java,Spring,Apache Kafka,Apache Kafka Streams,Spring Cloud Stream,我将使用StateRestoreListener和Spring Cloud Kafka Streams活页夹。 我需要监视应用程序的容错状态存储的恢复进度。 汇流中有一个例子 为了观察您提供的所有状态存储的恢复情况 您的应用程序是 org.apache.kafka.streams.processor.StateRestoreListener接口。你 将org.apache.kafka.streams.processor.StateRestoreListener设置为 调用KafkaStreams

我将使用StateRestoreListener和Spring Cloud Kafka Streams活页夹。 我需要监视应用程序的容错状态存储的恢复进度。 汇流中有一个例子

为了观察您提供的所有状态存储的恢复情况 您的应用程序是 org.apache.kafka.streams.processor.StateRestoreListener接口。你 将org.apache.kafka.streams.processor.StateRestoreListener设置为 调用KafkaStreams#setGlobalStateRestoreListener方法

第一个问题是从应用程序中获取卡夫卡流。我通过使用

StreamsBuilderFactoryBean streamsBuilderFactoryBean = context.getBean("&stream-builder-process", StreamsBuilderFactoryBean.class);
KafkaStreams kafkaStreams = streamsBuilderFactoryBean.getKafkaStreams();
第二个问题是将StateRestoreListener设置为KafkaStreams,因为我得到了一个错误

java.lang.IllegalStateException:只能设置 处于已创建状态的GlobalStateRestoreListener。当前状态为:正在运行

在Spring Cloud Kafka Streams活页夹中可以使用StateRestoreListener吗?
谢谢

您可以通过使用允许您访问底层
KafkaStreams
对象的
StreamsBuilderFactoryBeanCustomizer
来实现这一点。如果您使用的是活页夹版本3.0或更高版本,这是推荐的方法。例如,您可以在应用程序中提供以下
bean
,并使用
GlobalStateRestoreListener
对其进行自定义

@Bean
public StreamsBuilderFactoryBeanCustomizer streamsBuilderFactoryBeanCustomizer() {
    return factoryBean -> {
        factoryBean.setKafkaStreamsCustomizer(new KafkaStreamsCustomizer() {
            @Override
            public void customize(KafkaStreams kafkaStreams) {
                kafkaStreams.setGlobalStateRestoreListener(...);
            }
        });
    };
}

有更多关于这个策略的细节

您可以通过使用允许访问底层
KafkaStreams
对象的
StreamsBuilderFactoryBeanCustomizer
来实现这一点。如果您使用的是活页夹版本3.0或更高版本,这是推荐的方法。例如,您可以在应用程序中提供以下
bean
,并使用
GlobalStateRestoreListener
对其进行自定义

@Bean
public StreamsBuilderFactoryBeanCustomizer streamsBuilderFactoryBeanCustomizer() {
    return factoryBean -> {
        factoryBean.setKafkaStreamsCustomizer(new KafkaStreamsCustomizer() {
            @Override
            public void customize(KafkaStreams kafkaStreams) {
                kafkaStreams.setGlobalStateRestoreListener(...);
            }
        });
    };
}

有更多关于这个策略的细节

您必须在将属性加载到流中时注入该属性builder@cricket_007谢谢我考虑过,但我不知道如何在Kafka Streams创建状态时捕获时间。您必须在将属性加载到流中的时间前后注入该属性builder@cricket_007谢谢我想了想,但我不知道如何在卡夫卡溪创造国家的时候抓住时间。你们帮助了我。谢谢)如果成功了,请随意接受这个答案,这样其他有同样问题的人可能会受益。你帮助了我。谢谢)如果有效,请随意接受这个答案,这样其他有相同问题的人可能会受益。