내용으로 건너뛰기

MSK 보안 패치중 프로듀서 send시 ProducerFencedException이 여러번 발생합니다.

0

안녕하세요. MSK 사용중이고, 설정값은 AZ = 2, RF = 2, minISR = 1 로 사용중입니다.

클라이언트에선 문자열로 부트스트랩 설정하고 사용하고있습니다. 매달 msk 보안 패치시
org.apache.kafka.common.errors.ProducerFencedException: Producer with transactionalId 'nsc-meta-service-10.136.246.16518' and (producerId=23014, epoch=0) has been fenced by another producer with the same transactionalId 라는 에러가 발생하고 있습니다.

아마도 이로인해 데이터 유실이 있을것 같은데 어떤 세팅이 잘못되었는지 클라이언트에서 잘못 사용하고있는건지 알고 싶습니다.

감사합니다.

질문됨 일 년 전191회 조회
1개 답변
0

해당 문제를 검토한 결과, 이 문제가 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 문제를 해결하기 위해 어플리케이션 관련한 몇 가지 검토해볼 주요 포인트 말씀드립니다.

  1. 트랜잭션 ID 충돌 문제

어플리케이션에서 현재 설정이 이렇게 되어있을 가능성이 높습니다 properties.put("transactional.id", "nsc-meta-service-" + InetAddress.getLocalHost().getHostAddress());

트랜잭션 ID가 IP 주소를 기반으로 생성되어 있어, 컨테이너 재시작시 같은 ID를 가질 수 있습니다 권장 설정: 인스턴스별 유니크한 ID 사용 (예: UUID + 서비스명 조합)

[+] https://stackoverflow.com/questions/53058715/what-is-reason-for-getting-producerfencedexception-during-producer-send

  1. Producer 설정 검토

properties.put("transaction.timeout.ms", "900000"); // 기본값 60000ms properties.put("max.block.ms", "60000"); properties.put("delivery.timeout.ms", "120000");

transaction.timeout.ms를 늘려서 패치 중 발생할 수 있는 일시적인 연결 끊김에 대비하시는 것을 권고드립니다.

  1. MSK 설정 권장사항 AZ가 3개 있는 클러스터 설정 RF(Replication Factor) = 3으로 설정 권장 min.insync.replicas = 2로 설정 권장

[+] https://repost.aws/ko/knowledge-center/msk-avoid-disruption-during-patching

  1. 클라이언트 재연결 설정

properties.put("reconnect.backoff.ms", "1000"); properties.put("reconnect.backoff.max.ms", "10000");

AWS
지원 엔지니어
답변함 일 년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.