카프카 스트림의 예외 처리

티루 :

여러 게시물을 통해 갔다 그러나 그것들을 처리하는 동안 그들의 대부분은 예외 처리에 대한 잘못된 메시지를하지 처리와 관련이 있습니다.

나는 스트림 응용 프로그램에서 수신되는 메시지를 처리하는 방법을 알고 싶어하고 메시지를 처리하는 동안 예외가있다? 예외 때문에 RuntimeException을 등 네트워크 오류와 같은 여러 이유가 될 수

  • 사람이 할 수있는 올바른 방법은 무엇 제안 있을까요? 내가 사용해야합니까 setUncaughtExceptionHandler? 또는 더 나은 방법은 무엇입니까?
  • 어떻게 시도를 처리하기 위해?

사전에 감사합니다!

Vasiliy Sarzhynskyi :

그것은 당신이 제작자 측에서 예외 원하는 작업 의존한다. 예외가 (예를 들면 인해 네트워크에 장애 또는 카프카 브로커가 사망했다) 생산에 발생 될 경우, 스트림은 기본적으로 죽을 것이다. 그리고 당신은 구현하여 기본 동작을 재정의 할 수있는 버전 1.1.0 카프카 - 스트림을 ProductionExceptionHandler다음과 같이 :

public class CustomProductionExceptionHandler implements ProductionExceptionHandler {

    @Override
    public ProductionExceptionHandlerResponse handle(final ProducerRecord<byte[], byte[]> record,
                                                     final Exception exception) {
        log.error("Kafka message marked as processed although it failed. Message: [{}], destination topic: [{}]",  new String(record.value()), record.topic(), exception);
        return ProductionExceptionHandlerResponse.CONTINUE;
    }

    @Override
    public void configure(final Map<String, ?> configs) {
    }

}

핸들 방법에서 당신이 중 하나를 반환 할 수 CONTINUE는 예외에 죽어 스트림을 원하지 않는 경우 반환에, FAIL당신은 스트림 정지 (FAIL은 기본입니다) 할 경우에. 당신은 스트림 설정에서이 클래스를 지정할 필요가 :

default.production.exception.handler=com.example.CustomProductionExceptionHandler

또한주의를 기울 것을 ProductionExceptionHandler핸들만을 생산에 대한 예외 및 스트리밍이 방법으로 메시지를 처리하는 동안 예외를 처리하지 않습니다는 mapValues(..), filter(..), branch(..)등, 당신은 (시도 / catch 블록 이러한 방법의 논리를 포장 보장하는에 try 블록에 모든 방법 로직을 배치해야 당신은) 모든 예외적 인 경우를 처리합니다 :

.filter((key, value) -> { try {..} catch (Exception e) {..} })

내가 아는 한, 우리는 카프카 스트림 나중에 소모 자동으로 재 시도로, 명시 적으로 소비자 측 핸들 예외에 필요하지 않습니다 (메시지 소비 및 처리 될 때까지 변경되지 않습니다 오프셋으로); 예를 들어, 만약 카프카 브로커 당신은 카프카 스트림에서 예외를 가지고 것이며, 최대있을 것입니다 깨진 경우, 카프카 스트림은 모든 메시지를 소비한다, 시간에 도달 할 수없는 것입니다. 이 경우에 우리는 단지 지연 것이다 아무것도 손실 / 손상하지 않습니다.

으로 setUncaughtExceptionHandler당신은과 같은 기본 동작을 변경할 수 없습니다 ProductionExceptionHandler, 그것으로 만 실패 항목에 오류 또는 송신 메시지를 기록 할 수있다.

추천

출처http://43.154.161.224:23101/article/api/json?id=136461&siteId=1