- 최신
- 최다 투표
- 가장 많은 댓글
해당 문제를 검토한 결과, 이 문제가 MSK 서비스 측에서 발생한 것이 아님을 확인했습니다. 오히려 문제의 근본 원인을 이해하기 위해 kafka 애플리케이션을 더 자세히 검토할 것을 제안드립니다.
일반적으로 ProducerFenceException은 동일한 transactional.id 버전을 사용하는 다른 프로듀서가 활성 상태일 때 발생합니다. [+] https://github.com/apache/kafka/blob/2.2.1/clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java#L640
Best Effort 로 ProducerFencedException 문제를 해결하기 위해 어플리케이션 관련한 몇 가지 검토해볼 주요 포인트 말씀드립니다.
- 트랜잭션 ID 충돌 문제
어플리케이션에서 현재 설정이 이렇게 되어있을 가능성이 높습니다 properties.put("transactional.id", "nsc-meta-service-" + InetAddress.getLocalHost().getHostAddress());
트랜잭션 ID가 IP 주소를 기반으로 생성되어 있어, 컨테이너 재시작시 같은 ID를 가질 수 있습니다 권장 설정: 인스턴스별 유니크한 ID 사용 (예: UUID + 서비스명 조합)
- Producer 설정 검토
properties.put("transaction.timeout.ms", "900000"); // 기본값 60000ms properties.put("max.block.ms", "60000"); properties.put("delivery.timeout.ms", "120000");
transaction.timeout.ms를 늘려서 패치 중 발생할 수 있는 일시적인 연결 끊김에 대비하시는 것을 권고드립니다.
- MSK 설정 권장사항 AZ가 3개 있는 클러스터 설정 RF(Replication Factor) = 3으로 설정 권장 min.insync.replicas = 2로 설정 권장
[+] https://repost.aws/ko/knowledge-center/msk-avoid-disruption-during-patching
- 클라이언트 재연결 설정
properties.put("reconnect.backoff.ms", "1000"); properties.put("reconnect.backoff.max.ms", "10000");
관련 콘텐츠
- 질문됨 2년 전