Blog

시스템 아키텍처 레벨에서의 동시성 제어

카프카에서의 동시성 제어

카프카는 프로듀서(생산자)와 컨슈머(소비자) 모델을 사용하여 메시지(데이터)를 처리합니다. 프로듀서는 데이터를 생성하여 카프카의 '토픽(topic)'에 게시하고, 컨슈머는 이러한 토픽을 구독하여 데이터를 소비합니다. 카프카 클러스터는 이러한 메시지들을 분산 시스템 상의 여러 서버(브로커)에 걸쳐 저장하고 처리합니다.

카프카에서의 동시성 제어

토픽과 파티션: 카프카의 토픽은 파티션으로 나누어집니다. 파티션은 동시성 제어의 핵심 요소로, 각 파티션 내에서 메시지의 순서가 보장됩니다. 이는 한 파티션 안에서는 동시에 한 컨슈머만이 메시지를 읽을 수 있다는 것을 의미합니다.
컨슈머 그룹: 여러 컨슈머가 같은 토픽을 구독할 때, 각 컨슈머는 컨슈머 그룹에 속합니다. 카프카는 각 컨슈머 그룹에 대해 토픽의 각 파티션을 한 컨슈머에게만 할당합니다. 이를 통해, 같은 컨슈머 그룹 내의 컨슈머들 사이에서 동시성 문제가 발생하지 않도록 합니다.
오프셋 관리: 컨슈머가 메시지를 처리할 때, 그 위치를 '오프셋(offset)'이라는 숫자로 기록합니다. 컨슈머가 데이터를 성공적으로 처리하고 다음 메시지로 이동할 준비가 되면, 오프셋을 업데이트하여 처리 상태를 관리합니다. 이 방법은 데이터 처리 과정에서 발생할 수 있는 중복 또는 데이터 손실을 방지하는데 도움을 줍니다.

카프카의 한계

카프카를 활용하면 단일 파티션 내에서의 동시성 문제는 해결할 수 있습니다. 이는 각 파티션에서 메시지들이 엄격한 순서대로 처리되기 때문입니다. 하지만, 여러 파티션을 사용하는 경우 각 파티션은 독립적으로 병렬 처리되므로, 전체 토픽의 범위에서는 여전히 동시성 문제가 발생할 수 있습니다.