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 라는 에러가 발생하고 있습니다.

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

감사합니다.

질문됨 18일 전43회 조회
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
지원 엔지니어
답변함 17일 전

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

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

질문 답변하기에 대한 가이드라인