我正在使用 Spring Cloud Stream Kafka Streams 编写Java应用程序。这是我正在使用的功能方法片段:
@Bean
public Function<KStream<String, String>, KStream<String, String>> process() {
return input ->
input.transform(
() ->
new Transformer<String, String, KeyValue<String, String>>() {
ProcessorContext context;
@Override
public void init(ProcessorContext context) {
this.context = context;
}
@Override
public void close() {}
@Override
public KeyValue<String, String> transform(String key, String value) {
String result = fetch_data_from_database(key, value);
return new KeyValue<>(key, result);
}
});
fetch_data_from_database()可能会引发异常。
在fetch_from_database()出现异常的情况下,如何停止对入站KStream(偏移量不应提交)的处理,并使其使用相同的偏移量数据重试处理?
答案 0 :(得分:1)
在这种情况下,您需要自行重试逻辑。为此,您可以使用Spring的RetryTemplate
。 This answer包含有关如何在Kafka Streams中使用RetryTemplate
的详细信息。它不使用您所使用的低级处理器API,但这是相同的想法。将您的数据库调用包装在重试模板中,并根据需要自定义重试。所有上游处理都将暂停,直到重试用尽。