✅ 1단계: Consumer 단일 스레드로 제한
기본 전제: 정합성 최우선이라면 동시에 여러 consumer thread가 처리하지 않도록 concurrency = 1
- 💡 이렇게 하면 Consumer는 Kafka Partition 단위로 순서대로 처리하므로 race condition 없이 안전.
- 단점: 처리 속도가 느릴 수 있음.
테스트
✅ 2단계: Partition 전략 활용한 멀티 Consumer 처리
처리량 늘리면서도 정합성 지키려면?
Kafka는 기본적으로 같은 key는 같은 Partition에 들어감
→ 그러니 senderUserId를 key로 설정해 메시지를 Kafka에 보낼 때 지정해줘:
이렇게 하면:
- 같은 유저 ID끼리는 순서대로 처리 (→ 락 충돌 없음)
- 다른 유저들끼리는 동시에 송금 처리 가능 (→ 성능 up)
테스트
'TIL' 카테고리의 다른 글
repository를 jpa, custom, customImpl 으로 과도하게 나눈건 아닐까? (0) | 2025.04.15 |
---|---|
기본 CRUD만 쓸 거면 JpaRepository만 쓰면 되지, 왜 또 Impl을 쓸까? (0) | 2025.04.15 |
락 순서 고정 (0) | 2025.04.06 |
비관적 락(Pessimistic Lock) 도입 (0) | 2025.04.05 |
포인트 송금 시스템에서의 동시성 처리 및 데드락 이슈 (0) | 2025.04.05 |