기존의 end to end 연결 방식의 아키텍쳐는 문제가 많았다.
실시간 트랙잭션(OLTP) 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없어 복잡도가 증가한다. 문제 발생 시 여러 시스템을 확인해야한다. 스케일아웃이 어렵다.
데이터 파이프라인 관리가 어렵다. 동일한 데이터를 각 개발 부서마다 다른 방법으로 파이프라인을 만들어 확장이 어려워지고 데이터의 신뢰도를 의심하게 된다.
🎻이에 링크드인에서 목표를 가지고 새로운 시스템을 만든다.
- 프로듀서와 컨슈머의 분리
- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용
- 높은 처리량을 위한 메시지 최적화
- 데이터가 증가함에 따라 스케일아웃이 가능한 시스템
그 결과 발생하는 모든 이벤트/데이터의 흐름을 중앙에서 관리하는 카프카를 만들었다.
🎻 메시징 시스템
메시지를 producer에서 카프카에 토픽(메시지 저장소)에 저장하면, consumer가 원하는 토픽에서 데이터를 가져간다.
🎻Pub/Sub 모델
비동기 메시징 전송 방식. 중앙에 메시징 시스템 서버를 두고 메시지를 보내고 받는 형태의 통신.
발신자는 수신자가 정해져 있지 않은 상태로 발행(Publish)하고, 구독(Subscribe)을 신청한 수신자만이 정해진 메시지를 받을 수 있음.
수신자는 발신자 정보 없이도 원하는 메시지만을 수신 가능.→ 다이나믹한 네트워크 토폴로지와 높은 확장성 확보
end to end 연결 방식(기존 연결 방식)
에서는 빠른 전송 속도와 전송 결과를 신속하게 알 수 있지만, 특정 개체에 문제가 발생했을 때 연쇄적인 문제가 발생하기 쉽다.
pub/sub 모델
에서는 데이터와 수신처 ID를 포함시켜 메시징 시스템으로 보내고 시스템의 교환기가 메시지 ID를 확인 후 해당 컨슈머의 큐에 전달한다. 컨슈머에서는 자기 큐에 메시지가 들어오면 메시지를 가져간다.
장점
1. 메시징 시스템만 살아 있으면 프로듀서에서 전달된 메시지가 유실되지 않는다.
2. 각각의 개체가 통신을 하는것이 아니라 메시징 시스템을 중심으로 연결되어 확장성이 용이하다.
3. 연결을 직접 건드리지 않고 교환기의 룰에 따라 메시지를 전달하므로 메시지 데이터 유실의 염려가 없다.
단점
1. 직접 통신을 하지 않기 때문에 전달 확인을 위해서는 코드가 복잡해진다.
2. 메시지 전달 속도가 상대적으로 느리다.
기존 메시징 시스템
을 사용하는 Pub/Sub 모델은 대규모 데이터보다는 간단한 이벤트를 전송했다. 메시지의 보관, 교환, 전달 과정에서 신뢰성을 보장하는 것에 중점을 맞췄기 때문에 속도와 용량을 중요시하지 않았다.
카프카
는 신뢰성 관리를 프로듀서와 컨슈머에게 넘기고, 메시징 전달 성능에 집중시킨 고성능 메시징 시스템이다.
프로듀서와 컨슈머의 분리
연결 구조가 단순해지고 각자의 역할이 완벽하게 분리되어 연쇄적으로 문제가 발생할 확률이 매우 적다.
멀티 프로듀서, 멀티 컨슈머
디스크에 메시지 저장
컨슈머가 메시지를 읽어가더라도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장한다. 트래픽이 일시적으로 폭주해 컨슈머의 처리가 늦어지더라도 카프카의 디스크에 안전하게 보관되어 있어, 컨슈머는 메시지의 손실 없이 가져갈 수 있다.
확장성
3대의 브로커로 시작해 수십 대의 브로커로 확장 가능하다.
높은 성능
분산 처리, 배치 처리 등 다양한 기법 사용
[도서] 카프카, 데이터 플랫폼의 최강자 - 고승범, 공용준 저
[Line Engineering] LINE에서 Kafka를 사용하는 방법 - 1편
크루들이 들려주는 카카오페이 오픈소스 kafka 활용법
넘나 어려운데 팔수록 재밌는데 더 파면 난죽택일것같은 그 느낌