인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

blackhole124님의 프로필 이미지

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

Kafka Cluster

카프카의 offset 개념에 관해 질문 있습니다.

해결된 질문

작성

·

106

·

수정됨

1

  • 학습 관련 질문을 최대한 상세히 남겨주세요!

  • 고민 과정도 같이 나열해주셔도 좋습니다.

  • 먼저 유사한 질문이 있었는지 검색해보세요.

  • 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

 

같은 Consumer groups에 속한 consumer들은 각각 다른 partition을 구독하는데, 같은 offset을 사용해야하는 이유가 잘 이해가 헷갈립니다.

 

즉, Consumer groups에 속한 consumer들끼리

같은 offset을 사용하는 이유가 잘 이해가 되질 않습니다

 

"각 데이터는 각 Topic의 Partition 단위로 순차적으로 기록되고, 기록된 데이터는 offset을 가진다." 라는게

간단한 예시를 들면,

Topic1 ( 날씨에 관한 데이터 )

Partition 1 ( 서울 날씨 관한 데이터)
partition 2 ( 부산 날씨 관한 데이터)

partition 3 ( 대구 날씨 관한 데이터)

 

라고 이해를 했습니다.

근데 여기서 partition마다 데이터가 다른데 같은 offset을 사용한다는 개념이 잘 와닿지가 않습니다

 

 

항상 강의 잘 보고 있습니다.

 

감사합니다

답변 2

2

쿠케님의 프로필 이미지
쿠케
지식공유자

blackhole124님, 안녕하세요!

 

offset은 토픽의 파티션 단위로 관리됩니다.

컨슈머 그룹 내 컨슈머들이 같은 offset을 사용한다는건,

모든 파티션에 대해 같은 offset을 사용한다는게 아니라,

각 파티션에 대해 같은 offset을 사용한다는 의미입니다.

그래야 각 파티션의 데이터를 중복없이 처리할 수 있는 것이고요!

 

아래 예시는, 날씨 토픽이 있고, 각 지역별 데이터를 파티션으로 분산하려는 의도로 이해했습니다.

topic1 ( 날씨에 관한 데이터 )

partition 1 ( 서울 날씨 관한 데이터)
partition 2 ( 부산 날씨 관한 데이터)

partition 3 ( 대구 날씨 관한 데이터)

동일한 컨슈머 그룹 내에서 consumer A와 B가 실행되었고,

A는 파티션 1과 2를 할당,

B는 파티션 3을 할당 받았다고 해보겠습니다.

offset은 각 파티션마다 관리됩니다.

A는 파티션 1을 3번 레코드까지 처리하고, 파티션 2를 4번 레코드까지 처리합니다.

B는 파티션 3을 2번 레코드까지 처리합니다.

이후에 consumer C가 동일한 컨슈머 그룹으로 새롭게 실행되어서,

A는 파티션 1 할당, B는 파티션 3 할당, C는 파티션 2가 할당되었습니다.

동일한 컨슈머 그룹이기 때문에, 파티션 2는 4번 레코드까지 처리되었다는 사실이 공유되고 있습니다.

파티션 2에 새로운 데이터가 들어와도, 컨슈머 C는 파티션 2의 5번 레코드부터 처리하게 됩니다.

4번 레코드까지는 이미 컨슈머 A에서 처리했기 때문입니다.

만약 offset을 공유하지 않았으면, 컨슈머 C는 어디까지 데이터가 처리됐었는지 모르므로, 파티션 2의 1~4번 레코드를 중복으로 처리하게 됩니다.

 

 

0

인프런 AI 인턴님의 프로필 이미지

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

Kafka의 Offset 개념은 메시지 시스템에서 매우 중요한 주제 중 하나입니다. 질문 주셔서 감사합니다. 두 가지 질문에 대해 아래와 같이 정리해 드리겠습니다.

첫번째 질문에 대한 답변

blackhole124님께서 이해하신 바대로, Kafka는 Topic을 여러 Partition으로 나누고 각 Partition은 순서가 보장된 데이터 로그입니다. 또한, 같은 Consumer Group에 속한 Consumer들은 같은 Topic을 구독하지만 서로 다른 Partition을 구독함으로써 병렬로 데이터를 처리할 수 있게 됩니다. 이 부분은 아주 정확히 이해하신 것입니다.

Offset은 각 Partition 내에서 각 메시지의 고유한 식별자인 순서 번호입니다. 따라서, Consumer는 이 Offset을 활용해 데이터를 차례로 읽어 들일 수 있습니다.

두번째 질문에 대한 답변

Consumer Group 내의 Consumer들은 각각 다른 Partition을 구독하며, 각 Partition 내에서의 메시지 처리 위치를 나타내는 Offset은 각 Consumer마다 다르게 관리됩니다. 이 때문에 같은 Consumer Group 내의 Consumer들이 “같은” Offset을 사용하는 것이 아니라, “각각의 Partition에서 지난 메시지의 위치”를 추적하여 다음에 읽을 메시지를 결정하게 됩니다.

이를 통해 각 Consumer는 자신이 담당하는 Partition 내에서의 메시지 처리를 독립적으로 유지할 수 있으며, 병렬로 데이터를 효율적으로 처리합니다. 같은 Consumer Group 내의 Consumer들이 같은 Partition을 구독하여 서로 다른 위치의 메시지를 동시에 처리할 수 없으므로, Offset 관리는 프로그램 상에서 매우 중요한 역할을 합니다.

관련 주제에 대해 궁금하신 점이 있으시면 아래 유사한 질문과 답변을 참고하실 수 있습니다:

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