Skip to content

Commit ff73927

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

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,13 @@ author: devFancy
162162

163163
* 이때 컨슈머는 메시지의 실제 처리 성공 여부는 확인하지 않으므로 처리 중 장애가 발생하면 해당 메시지는 유실될 수 있다.
164164

165-
* `false` (수동 커밋): 개발자가 직접 커밋 시점을 제어하여 신뢰성을 높인다.
165+
* `false` (수동 커밋): 대부분의 개발자는 직접 커밋 시점을 제어하여 신뢰성을 높이고자 한다.
166+
167+
* **애플리케이션이 명시적으로 커밋하려 할 때만 오프셋이 커밋**되게 할 수 있다.
166168

167169
* `commitSync()``commitAsync()` 같은 API를 사용하여, 메시지 처리가 성공적으로 완료되었음을 보장한 후에만 오프셋을 커밋한다.
168170

169-
* 이는 메시지 유실을 방지하지만, 처리 로직과 커밋 사이에 장애가 발생하면 중복이 발생할 수 있다 (유실보다는 중복이 더 안전한 선택일 때가 많다).
171+
* 이는 메시지 유실을 방지하지만, 처리 로직과 커밋 사이에 장애가 발생하면 중복이 발생할 수 있다.
170172

171173

172174
## 실제 프로젝트에 적용하기: 쿠폰 시스템 Consumer 설정
@@ -201,15 +203,15 @@ public class KafkaConsumerConfig {
201203
// 1. 신뢰성 관련 설정
202204
// 1-1) 오프셋 수동 커밋 설정 -> 메시지 처리 완료 후 애플리케이션이 직접 커밋 시점을 제어하여, 메시지 유실을 방지.
203205
config.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
204-
// 1-2) 새로운 컨슈머 그룹이 처음 토픽을 읽을 때, 가장 오래된 메시지부터 읽도록 설정
205-
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
206+
// 1-2) 가장 최신 메시지, 즉 컨슈머가 실행된 이후에 들어오는 메시지부터 읽기 시작한다.
207+
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
206208

207209
// 2. 안정성 관련 설정
208-
// 2-1) 컨슈머가 브로커(그룹 코디네이터)에게 하트비트를 보내지 않고 버틸 수 있는 최대 시간(기본값: 10,000 ms = 10초)
209-
config.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 30000);
210+
// 2-1) 컨슈머가 브로커(그룹 코디네이터)에게 하트비트를 보내지 않고 버틸 수 있는 최대 시간 (기본값: 45,000 ms = 45초)
211+
config.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 30000); // 30초로 설정
210212
// 2-2) 컨슈머가 얼마자 자주 하트비트를 보낼지 결정하는 주기. (기본값: 3,000ms = 3초)
211-
config.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 10000);
212-
// 2-3) poll() 간 최대 시간. 메시지 처리 시간보다 넉넉하게 설정. (기본값: 300,000ms = 5분)
213+
config.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 10000); // 10초로 설정
214+
// 2-3) poll()로 가져온 메시지를 처리하는 데 허용된 최대 시간. (기본값: 300,000ms = 5분)
213215
config.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 600000); // 10분
214216
// 2-4) 리밸런싱 시 중단을 최소화하는 '협력적 리밸런스' 전략 사용.
215217
config.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, "org.apache.kafka.clients.consumer.CooperativeStickyAssignor");
@@ -259,11 +261,11 @@ public class KafkaConsumerConfig {
259261

260262
* 이는 메시지 유실을 방지하는 확실한 방법이다.
261263

262-
* `AUTO_OFFSET_RESET_CONFIG``earliest`로 설정했다.
264+
* `AUTO_OFFSET_RESET_CONFIG``latest`로 설정했다.
263265

264266
* 이를 통해 새로운 컨슈머 그룹이 서비스를 시작하거나 오프셋 정보가 유실되었을 때,
265267

266-
* 토픽의 가장 처음부터 모든 메시지를 처리하도록 하여 의도치 않게 데이터를 건너뛰는 상황을 방지한다.
268+
* 컨슈머가 실행된 이후에 들어오는 메시지부터 읽기 시작한다.
267269

268270
> 안정성
269271

0 commit comments

Comments
 (0)