Skip to content

Commit 6163863

Browse files
committed
Update Kafka Post " [카프카 핵심 가이드] CHAPTER 4. 카프카 컨슈머: 컨슈머 설정 및 오프셋과 커밋 "
1 parent a7b455b commit 6163863

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

_posts/2025-08-14-Kafka-Consumer-Config-And-Commit.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ author: devFancy
2727

2828
컨슈머의 성능과 가용성에 영향을 주는 몇몇 중요한 설정들이 있다. 아래는 여러 설정들 중에 중요한 속성 위주로 정리했다.
2929

30-
> 데이터 가져오기
30+
31+
## 데이터 가져오기
3132

3233
컨슈머가 브로커로부터 데이터를 얼마나, 어떻게 가져올지를 결정하는 설정이다. 처리량(Throughput)과 지연 시간(Latency) 사이의 균형을 맞추는 것이 중요하다.
3334

@@ -57,7 +58,7 @@ author: devFancy
5758
이는 아래에서 설명할 `max.poll.interval.ms`와 밀접한 관련이 있다.
5859

5960

60-
> 그룹 안정성과 상태 관리
61+
## 그룹 안정성과 상태 관리
6162

6263
컨슈머가 그룹 내에서 '살아있음'을 알리고, 비정상적인 상황에서 어떻게 동작할지를 결정하는 매우 중요한 설정이다.
6364

@@ -89,7 +90,8 @@ author: devFancy
8990

9091
* `max.poll.interval.ms`은 컨슈머의 **메시지 처리 로직**이 일을 하고 있는지(Progress) 감시하는 역할이다.
9192

92-
> 파티션 할당 전략
93+
94+
## 파티션 할당 전략
9395

9496
리밸런싱이 발생했을 때, 그룹 내 컨슈머들에게 파티션을 어떻게 분배할지 결정하는 알고리즘이다. `partition.assignment.strategy`로 설정한다.
9597

@@ -108,6 +110,10 @@ author: devFancy
108110

109111
카프카에서는 **파티션의 현재 위치를 업데이트하는 작업**`오프셋 커밋`(Offset Commit)이라고 부른다.
110112

113+
안전한 처리 흐름은 "메시지 처리 완료 -> 오프셋 커밋" 순서를 따르는 것이다.
114+
115+
이는 책의 페이지를 다 읽고 나서 그 뒤에 책갈피(오프셋)를 꽂는 것과 같다. 이렇게 해야 컨슈머에 장애가 발생해도 어디까지 읽었는지 정확히 알 수 있다.
116+
111117
컨슈머는 자신이 성공적으로 처리한 마지막 메시지의 오프셋을 커밋하고, 이 정보는 `__consumer_offsets`라는 토픽에 저장된다.
112118

113119
리밸런스가 발생하면, 컨슈머는 이 커밋된 오프셋을 읽어와서 작업이 중단된 지점부터 처리를 재개한다.
@@ -123,6 +129,8 @@ author: devFancy
123129

124130
컨슈머 그룹이 특정 파티션에 대해 저장된 오프셋 없이 처음으로 읽기를 시작하거나, 기존 오프셋이 더 이상 유효하지 않을 때 어떻게 동작할지를 결정한다.
125131

132+
(만약 유효한 오프셋이 있다면, 컨슈머는 이 설정을 무시하고 마지막으로 커밋된 지점부터 작업을 이어간다.)
133+
126134
* `latest` (기본값): 가장 최신 메시지, 즉 컨슈머가 실행된 **이후**에 들어오는 메시지부터 읽기 시작한다.
127135

128136
* `earliest`: 파티션에 저장된 **가장 오래된** 메시지부터 읽기 시작한다. (모든 데이터를 처음부터 처리)
@@ -136,9 +144,9 @@ author: devFancy
136144

137145
* `true` (자동 커밋): 가장 쉬운 방법이지만, **메시지 유실 가능성**이 있다.
138146

139-
* `auto.commit.interval.ms`(기본 5초)마다 `poll()`로 가져온 최신 오프셋을 커밋한다. 컨슈머는 메시지가 실제로 처리되었는지 알지 못한다.
140-
141-
* 따라서 메시지 처리 중에 컨슈머가 다운되면 오프셋은 이미 커밋되었을 수 있어 해당 메시지는 유실된다.
147+
* `auto.commit.interval.ms`(기본 5초)마다 `poll()`로 가져온 최신 오프셋을 자동으로 커밋하는데,
148+
149+
* 이때 컨슈머는 메시지의 실제 처리 성공 여부는 확인하지 않으므로 처리 중 장애가 발생하면 해당 메시지는 유실될 수 있다.
142150

143151
* `false` (수동 커밋): 개발자가 직접 커밋 시점을 제어하여 신뢰성을 높인다.
144152

0 commit comments

Comments
 (0)