# 카프카 동작방식
카프카는 기본적으로 메시징 서버로 동작합니다.
메시지 단위를 보내는 측 (퍼블리셔 또는 프로듀서)에서 카프카에 토픽이라는 각각의 메세지 저장소에 저장하면서, 가져가는 측(서브스크라이버subscriber, consumer컨슈머)이 원하는 토픽에서 데이터를 가져가게 되어있습니다.
중앙에 메시징 서버를 두고 이렇게 메세지를 보내고 받는 형태의 통식을 펍/섭(pub/sub) 모델이라고 합니다.
프로듀서가 메시지를 컨슈머에게 직접 전달하는 게 아니라 중간의 메시징 시스템에 전달합니다.
이때 메시지 데이터와 수신처 ID를 포함시킵니다. 메세징 시스템의 교환기가 메시지의 수신처 ID 를 포함시킵니다.
메시징 시스템의 교환기가 메시지의 수신처 아이디 값을 확인한 다음 컴슈머들의 큐에 전달합니다. 컨슈머는 자신들의 큐를 모니터링하고 있다가 큐에 메시지가 전달되면 이 값을 가져갑니다.
## pub/sub 구조의 장단점
장점
1. 개체가 하나 빠지거나 수신 불능 상태가 되었을 때에도, 메시징 시스템만 살아 있으면 프로듀서에서 전달된 메시지가 유실되지 않습니다.
이 메시지는 불능 상태의 개체가 다시 회복 되면 언제든지 다시 가져갈 수 있습니다.
2. 확장성 용이 - 메시징 시스템을 중심으로 연결되기 때문에 확장성이 용이합니다.
3. 데이터 유실의 위험이 없음
단점
1. 메시지 전달에 대한 확인이 필요 -> 복잡성 증가, 중간에 메시징 시스템이 있기 때문에 메시지 전달 속도가 빠르지 않다는 점
카프카는 이러한 단점을 극복하기 위해 무엇을 하는가?
=> 메시지 교환 전달의 신뢰성을 관리를 프로듀서와 컨슈머쪽으로 넘기고, 부하가 많이 걸리는 교환기 기능 역시 컨슈머가 만들 수 있게 함으로써 메시징 시스템 내에서의 작업량을 줄이고, 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켜서 고성능 메시징 시스템을 만들어 냈다.
## 카프카의 메시지 전달 순서
1. 프로듀서는 새로운 메시지를 카프카로 보냅니다.
2. 프로듀서가 보낸 메시지는 카프카에 컨슈머 큐(카프카 토픽)에 도착해 저장됩니다.
3. 컨슈머는 카프카 서버에 접속하여 새로은 메시지를 가져갑니다.
카프카에 수많은 메시지들이 저장되고, 그 메시지들은 토픽이라는 식별자를 이용해 토픽 단위로 저장되고 있습니다.
# 카프카의 특징
### 1. 프로듀서와 컨슈머의 분리
<카프카를 사용하지 않았을때의 문제점>
여러 서버들을 관리하기 위한 모니터링을 적용시, 매우 복잡한 형태로 구성됩니다.
이때 웹 서버군의 서버가 1대 추가된다면, 단순한 웹 서버만 추가되는 것이 아니라, 연동되어야 할 시스템이 많아지기 떄문에 추가적인 작업도 매우 늘어납니다.
게다가 일대일 통신하고 있던 모니터링 서버에 문제가 생겨 응답이 늦어지는 경우가 발생하면 연쇄작용으로 모니터링 서버와 연결된 다른 서비스 서버들에서도 지연등의 이슈가 발생할 수 있습니다 .
<카프카 적용시>
카프카를 사용하므로서, 구조가 매우 단순해지고, 각각의 서비스 서버들은 모니터링이나 분석 시스템의 상태 유무와 관계 없이 카프카로 메시지를 보내는 역할만 하면 되고, 마찬가지로 모니터링이나 분석 시스템들도 서비스 서버들의 상태 유무와 관계 없이 카프카에 저장되어 있는 메시지만 가져오면 됩니다. 이렇게 각자의 역할이 완벽하게 분리되면서, 어느 한쪽 시스템에 문제가 발생하더라도 연쇄작용이 발생할 확률은 매우 낮아집니다.
웹서버가 추가되더라고 카프카로만 보내면 되기 때문에 서버 추가에 대한 부담도 줄일 수 있는 장점이 있습니다.
### 2. 멀티 프로듀서 멀티 컨슈머
카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되었습니다.
프로듀서가 하나의 토픽에만 메시지를 보내는 것이 아니라, 하나 또는 하나 이상의 토픽으로 메시지르 보낼 수 있습니다.
컨슈머 역시 하나의 토픽에서만 메시지를 가져오는 것이 아니라 하나 또는 하나 이상의 토픽으로부터 메시지를 가져올 수 있습니다.
=> 하나의 데이터를 다양한 용도로 사용하는 요구에 따라 여러 요구사항들을 손쉽게 충족할 수 있습니다.
### 3. 디스트에 메시지 저장
기존 메시징 시스템과 가장 다른 특징 중 하나는디스크에 메시지를 저장하고 유지하는 것입니다.
일반적 : 메시지를 읽어가면 큐에서 바로 메시지를 삭제
kafka : 컨슈머가 메시지를 읽어 가더라도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장
트래픽이 일시적으로 폭주해 컨슈머의 처리가 늦어지더라도 카프카의 디스크에 안전하게 보관되어 있기 때문에, 컨슈먼느 메시지 손실 없이 메시지를 가져갈 수 있습니다.
컨슈머 버그가 존재시, 오류를 해결하고 다시 실행하더라고, 메시지 손실 없이 작업이 가능합니다.
### 4. 확장성
카프카는 확장성이 매우 용이하도록 설계되어있습니다.
하나의 카프카 클러스터는 3대의 브로커로 시작해 수십대의 브로커로 확장 가능합니다.
또한 확장 작업은 카프카 서비스의 중단 없이 온라인 상태에서 작업이 가능합니다. 최초의 카프카 클러스터를 구성시 적은 수로 시작하더라고, 이후 트랙픽 및 사용량 증가로 클러스터를 확장하는 작업은 매우 간단할 뿐 아니라, 큰 부담 없이 할 수 있습니다.
### 5. 높은 성능
고성능을 유지하기 위해 카프카는 내부적으로 분산 처리, 배치 처리 등 다양한 기법을 사용하고 잇습니다.
'Backend' 카테고리의 다른 글
[kafka] 카프카 관리를 위한 주키퍼 (0) | 2025.04.01 |
---|---|
[Backend] Kafka 명령어 (0) | 2025.03.15 |
[Backend] kafka - Spring Boot 프로젝트 설정하기 (0) | 2025.03.13 |
댓글