인프런 커뮤니티 질문&답변

꼬꼬록님의 프로필 이미지

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

ISR(In-Sync-Replicas)와 acks 옵션

브로커의 장애복구 이후 처리과정에 대해서 질문드립니다.

작성

·

95

·

수정됨

0

안녕하세요.

 

강의 너무 잘 듣고있습니다.

 

unclean.leader.election.enable=true 일때, ISR상태가 아닌 상태에서 브로커에 장애가 발생한 경우, 장애가 발생한 브로커를 되살렸을때 처리되지 못한 레코드는 어떻게 처리되나요?

 

위의 상황을 판단해보면, 아래와 같습니다.

  1. ISR여부와 상관없이 다른 리더파티션이 선출되어 작동

  2. 장애가 발생한 브로커의 시스템에서는 OS레벨 이하의 장애가 아닌상황이라면 카프카 프로세스의 브로커와 다른 생명주기를 가진 OS레벨의 페이지캐시에 의해 파일시스템에 남아있음.

브로커가 되살아날 경우 유실되었던 레코드를 포함시켜주는지, 삭제가 되어버리는지, 아니면 별도로 처리를 해야하는지 관련해서 처리 매커니즘을 제공하는것이 있는지 궁금합니다.

 

 

답변 2

0

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요.

unclean.leader.election.enable=true 일때 ISR이 아닌상태에서 브로커 장애가 발생한 경우 프로듀서의 acks 옵션에 따라 두가지 방식으로 진행됩니다.

1) producer acks=all 인 경우

특정 브로커에 레코드를 전송을 완료하고 복제되기를 기다리다가 장애가 발생하는 경우일 것입니다. 브로커 입장에서는 해당 레코드가 복제되지 않았다는 것을 알고 있으며 프로듀서는 응답을 받지 못해 timeout이 발생하게 됩니다. 이에 따라 retry를 진행해서 레코드를 승급된 리더 파티션(이전엔 팔로워 였음)으로 전송하므로 레코드는 안전하게 재전송됩니다.

 

2) producer acks=1인 경우

특정 브로커에 레코드를 전송을 완료하고 장애가 발생하게 되는 경우일 것입니다. 브로커 입장에서 해당 레코드가 복제되지 않았고, 프로듀서 입장에서는 정상 전송되었다고 판단하므로 해당 레코드는 유실 시키고 다음 레코드를 프로듀서가 전송하게 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다.

고래밥님께서 질문하신 ack=1 설정 시 카프카 브로커 응답 시점에 대해 설명드리겠습니다.

ack=1 일 때, 브로커는 메시지를 리더 파티션에 성공적으로 적재한 후에 클라이언트에게 응답을 보냅니다. 이 때, 팔로워 파티션에 대한 상태는 고려하지 않게 됩니다.

메시지가 리더에 적재되었는지 확인하려면, 메시지가 파일 시스템에 안전하게 기록되었는지 아니면 메모리에만 기록된 후 응답이 전송되는지에 대한 설명이 필요할 수 있습니다.

  • 카프카는 메시지를 먼저 메모리에 버퍼링하고, 이후 디스크로 기록합니다. 이 과정에서 카프카는 “fsync”라는 호출을 사용해 데이터를 디스크로 즉시 플러시(flash)하지는 않습니다. 즉, 메시지가 메모리에 존재하는 상태에서 클라이언트에게 응답을 보낼 수 있습니다.

한편, ISR이 충족되지 않은 상태에서 리더 파티션에 장애가 발생했을 경우, 카프카는 자동으로 팔로워 파티션을 리더로 승급시키는 과정을 거칩니다. 이 때, 데이터 유실을 방지하기 위해 복구 매커니즘이 존재합니다.

이와 관련하여 유사한 질문 및 답변을 포함한 내용을 아래에 공유드립니다:

이 링크들은 ISR과 리더 파티션 승급, 데이터 유실 방지 매커니즘 등에 대해 보다 상세한 설명을 제공하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.