如何处理在Kafka Streams中处理数据期间发生的错误

时间:2020-08-27 10:08:13

标签: apache-kafka apache-kafka-streams spring-cloud-stream

我正在使用 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(偏移量不应提交)的处理,并使其使用相同的偏移量数据重试处理?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要自行重试逻辑。为此,您可以使用Spring的RetryTemplateThis answer包含有关如何在Kafka Streams中使用RetryTemplate的详细信息。它不使用您所使用的低级处理器API,但这是相同的想法。将您的数据库调用包装在重试模板中,并根据需要自定义重试。所有上游处理都将暂停,直到重试用尽。