@@ -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