카프카란?
파이프라인, 스트리밍 분석, 데이터 통합을 위해 설계된 고성능 분산 이벤트 스트리밍 플랫폼이다.
Pub-Sub 모델의 메세지 큐 형태로 동작하며 분산환경에 특화되어 있다.
카프카를 사용하며 얻는 이점은 다음과 같다.
1.
모든 이벤트/데이터의 흐름을 중앙에서 관리할 수 있다.
2.
개발자는 각 서비스의 연결이 아닌 각 서비스의 비즈니스 로직에 집중할 수 있다.
3.
새로운 서비스/플랫폼이 추가되어도 확장에 용이하기 때문에 신뢰성과 확장성이 보장된다.
메세지 큐(MQ)란?
메세지 지향 미들웨어를 구현한 시스템으로 프로그램 간의 데이터를 교환할 때 사용하는 기술이다.
MQ의 장점
•
비동기 : 임시 저장소 Queue가 있기 때문에 나중에 처리가 가능하다.
•
낮은 결합도 : 어플리케이션간의 연결이 없으므로 결합도가 낮다.
•
확장성 : producer 나 consumer 서비스를 확장하는데 용이하다.
•
탄력성 : consumer 서비스가 다운되더라도 카프카가중단되는 것은 아니며 메세지는 지속하여 MQ에 남아있다.
•
보장성 : MQ에 들어간다면 결국 모든 메세지가 consumer 서비스에 전달됨을 보장한다.
메세지 지향 미들웨어 : 응용 소프트웨어 간의 비동기적 데이터 통신을 위한 소프트웨어이다.
메세지의 백업 기능을 이용하요 지속성을 제공하고 이 덕분에 송수신 동시에 네트워크 연결을 유지할 필요가 없다.
또한 미들웨어 계층 자신이 직접 메세지의 라우팅을 수행하기 때문에 하나의 메세지를 여러 서비스에 배포가 가능하다.
CONSUMER에서 KAFKA쪽으로 화살표가 뻗어있는 것을 중요하게 보자!
카프카 브로커가 컨슈머에게 메세지를 전송하는 것이 아니라 컨슈머가 카프카에서 메세지를 꺼내가는 것이다.
1. Producer & Consumer
•
Producer : 메세지를 카프카 브로커에 적재하는 서비스
◦
프로듀서가 카프카에 전달하는 메세지의 구조는 다음과 같다.
▪
토픽 (Topic)
▪
토픽 중 특정 파티션 위치 (Partition)
▪
메시지 생성 시간 (Timestamp)
▪
메시지 키 (Key)
▪
메시지 값 (Value)
◦
프로듀서가 카프카에 메세지를 전달하는 과정
1.
직렬화(Serealizable) : 메세지의 키와 값을 직렬화하여 바이트로 전환
3.
메세지 배치
4.
메시지 압축
a.
메세지 압축이 설정되었다면 설정 포맷에 맞춰 메세지를 압축한다.
b.
메세지를 압축함으로써 브로커로 빠르게 전달할 수도 있고 브로커 내부에서 빠른 복제가 가능하도록 한다.
5.
전달
a.
TCP 프로토콜을 사용하여 브로커로 메세지를 전송하는데 네트워크 전송은 무겁기 때문에 프로듀서는 지정된만큼 메세지를 저장했다가 한 번에 브로커로 전달할 수 있다.
•
Consumer : 카프카 브로커에 적재된 메세지를 읽어오는 서비스
◦
메세지를 읽을 때 마다 파티션으로 offset을 유지해서 처리했던 메세지의 위치를 추적한다.
◦
CURRENT-OFFSET : 컨슈머가 어디까지 메세지를 처리했는지를 나타내는 offset이며 동일한 메세지를 또 처리하거나, 처리하지 않은 메세지를 건너뛰지 않기 위해 사용한다.
2. Broker
•
카프카 서버의 Unit(단위)이다.
•
Producer의 메세지를 받아 offset을 지정한 후 디스크에 저장한다.
◦
offset은 컨슈머 그룹단위로 있기 때문에 여러 컨슈머 그룹에서 한 파티션의 데이터를 가져갈 수 있다.
ex) 결제정보를 결제서버와 통계서버에서 모두 가져가야 한다면…?
•
Consumer의 파티션 Read 요청에 응답하여 메세지를 전송한다.
•
카프카 클러스터는 여러 개의 Broker로 구성되어 있고 하나의 Role Broker가 있다.
◦
RoleBroker의 역할
▪
다른 브로커를 모니터하고 장애가 발생한 Broker의 특정 토픽의 Leader가 있다면 다른 브로커의 파티션 중 리더를 재분배하는 역할을 수행 (Controller)
▪
컨슈머 그룹을 모니터링을 하고 특정 컨슈머가 장애가 발생해 해당 메세지를 consume할 수 없을 때 해당 파티션을 다른 컨슈머에게 매칭해주는 역할을 수행 (Rebalance)
3. Mesaage
•
카프카에서 취급하는 데이터의 단위로 <Key, Value> 형식이다.
4. Topic & Partition
•
Topic
◦
Topic은 논리적으로 메세지를 구분하는 단위이다. ex) 결제 토픽, 주문 토픽 등..
◦
Topic의 이름은 카프카 내에서 고유하다.
◦
이메일 주소라고 생각하면 편하다.
•
Partition
◦
토픽의 병렬 처리를 위해 토픽은 여러 개의 파티션으로 구성되어 있다.
◦
카프카에서는 파티셔닝을 통해 하나의 토픽으로도 높은 처리량을 처리할 수 있다.
◦
파티션 번호는 0부터 시작한다.
▪
주의할 점
•
토픽의 파티션 수는 늘릴수만 있고 줄일 수는 없다. 처음 토픽의 파티션 개수를 설정할때 최대한 적게 생성한 후 처리량을 보고 추후에 늘리는 방식으로 설계하여야 한다.
•
Offset
◦
파티션의 메세지가 저장되는 위치
◦
순차적으로 증가하는 64비트의 정수 형태이다.
◦
파티션마다 고유한 offset을 가지고 있고 이를 통해 메세지의 순서를 보장하고 컨슈머에서는 마지막으로 읽은 메세지의 위치도 기억할 수 있다.
◦