>

카프카 제작자의 다양한 이유로 인해 종종 타임 아웃 예외가 발생합니다. 현재 생산자 구성에 모든 기본값을 사용하고 있습니다.

다음과 같은 시간 초과 예외를 보았습니다 :

org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for topic-1-0: 30001 ms has passed since last append

다음 질문이 있습니다 :

<올>
  • 이 타임 아웃 예외의 일반적인 원인은 무엇입니까?

    <올>
  • 임시 네트워크 문제
  • 서버 문제? 그렇다면 어떤 종류의 서버 문제입니까?
  • 타임 아웃 예외를 처리하기위한 일반적인 지침은 무엇입니까?

    <올>
  • 카프카 API가 재 시도하도록 '재시도'구성을 설정 하시겠습니까?
  • 'request.timeout.ms'또는 'max.block.ms'를 늘리시겠습니까?
  • 예외를 잡아서 응용 프로그램 계층이 메시지 전송을 재 시도하지만 비동기 전송에서는 메시지가 순서대로 전송되지 않으므로 어려워 보이는가?
  • 시간 초과 예외가 재시도 가능한 예외이며 다시 시도해도 안전한가요?

  • Kafka v2.1.0 및 Java 11을 사용하고 있습니다.

    미리 감사합니다.

    • 답변 # 1

      제작자와 브로커 모두에 대한 기본 Kafka 구성 값은 일반적으로 시간 초과가 발생하지 않도록 충분히 보수적입니다. 이러한 문제는 일반적으로 생산자와 브로커 사이의 비정상적인 네트워크를 나타냅니다.

      당신이 얻는 예외, Failed to update metadata 일반적으로 제작자가 브로커 중 하나에 연결할 수 없으며 메타 데이터를 가져올 수 없다는 효과가 있습니다.

      두 번째 질문으로 Kafka는 브로커가 완전히 확인하지 않은 메시지를 자동으로 보내려고 시도합니다. 응용 프로그램 쪽에서 시간 초과가 발생했을 때 catch하고 다시 시도하려는 경우 사용자에게 달려 있지만 1 분 이상 시간 초과하면 다시 시도해도 큰 차이가 없습니다. 어쨌든 브로커와 관련된 기본 네트워크/연결 가능성 문제를 파악해야합니다.

      경험상 일반적으로 네트워크 문제는 다음과 같습니다.

      포트 9092는 방화벽으로, 생산자 쪽 또는 브로커 쪽 또는 중간 어딘가에서 차단됩니다 ( nc -z broker-ip 9092 사용)  제작자를 실행하는 서버에서)

      DNS 해상도가 깨져서 포트가 열려 있어도 제작자는 IP 주소로 확인할 수 없습니다.

    • 답변 # 2

      "이 타임 아웃 예외의 일반적인 원인은 무엇입니까?"

      <올>

      앞에서 본 가장 일반적인 원인은 메타 데이터 정보가 멈 췄기 때문입니다. 한 브로커가 다운되고 해당 브로커의 주제 파티션이 다른 브로커로 페일 오버되었습니다. 그러나 주제 메타 데이터 정보가 올바르게 업데이트되지 않았으며 클라이언트는 여전히 실패한 브로커와 대화하여 메타 데이터 정보를 얻거나 메시지를 게시하려고합니다. 시간 초과 예외가 발생합니다.

      Netwowrk 연결 문제. 이것은 telnet broker_host borker_port 로 쉽게 진단 할 수 있습니다  

      브로커가 과부하되었습니다. 브로커가 높은 워크로드로 포화 상태이거나 너무 많은 토픽 파티션을 호스트하는 경우 발생할 수 있습니다.

      시간 초과 예외를 처리하려면 일반적인 방법은 다음과 같습니다.

      <올>

      브로커 측 문제를 배제하십시오. 주제 파티션이 완전히 복제되고 브로커가 과부하되지 않았는지 확인하십시오.

      있는 경우 호스트 이름 확인 또는 네트워크 연결 문제 해결

      request.timeout.ms 와 같은 튜닝 매개 변수 delivery.timeout.ms  내 과거의 경험은 대부분의 경우 기본값이 제대로 작동한다는 것입니다.

    관련 자료

  • 이전 sql - SSMS의보기에서 데이터 필드를 볼 수 없습니다
  • 다음 angular - 오류 - 'approutingmodule'모듈이 'approutingmodule'모듈을 반복적으로 내 보냅니다