kafka의 이해 1: 카프카란 무엇인가

su-mmer·2022년 7월 12일
0
post-thumbnail

카프카란 무엇인가


카프카의 탄생 배경

기존의 end to end 연결 방식의 아키텍쳐는 문제가 많았다.

  1. 실시간 트랙잭션(OLTP) 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없어 복잡도가 증가한다. 문제 발생 시 여러 시스템을 확인해야한다. 스케일아웃이 어렵다.

  2. 데이터 파이프라인 관리가 어렵다. 동일한 데이터를 각 개발 부서마다 다른 방법으로 파이프라인을 만들어 확장이 어려워지고 데이터의 신뢰도를 의심하게 된다.

🎻이에 링크드인에서 목표를 가지고 새로운 시스템을 만든다.

  • 프로듀서와 컨슈머의 분리
  • 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용
  • 높은 처리량을 위한 메시지 최적화
  • 데이터가 증가함에 따라 스케일아웃이 가능한 시스템

그 결과 발생하는 모든 이벤트/데이터의 흐름을 중앙에서 관리하는 카프카를 만들었다.

  • 새로운 데이터 스토어가 들어와도 카프카가 제공하는 표준 포맷으로 연결되어 있어 데이터를 주고받는 데 부담이 없다.
  • 다양한 분석이 가능해져 신뢰성 높은 데이터 분석과 실시간 분석이 가능하다.
  • 포맷과 별도의 앱 개발을 해야했는데 카프카에만 데이터를 전달하면 나머지는 필요한 곳에서 알아서 가져갈 수 있어 업무 효율성 증가.

카프카의 동작 방식과 원리

🎻 메시징 시스템
메시지를 producer에서 카프카에 토픽(메시지 저장소)에 저장하면, consumer가 원하는 토픽에서 데이터를 가져간다.

🎻Pub/Sub 모델
비동기 메시징 전송 방식. 중앙에 메시징 시스템 서버를 두고 메시지를 보내고 받는 형태의 통신.
발신자는 수신자가 정해져 있지 않은 상태로 발행(Publish)하고, 구독(Subscribe)을 신청한 수신자만이 정해진 메시지를 받을 수 있음.
수신자는 발신자 정보 없이도 원하는 메시지만을 수신 가능.

→ 다이나믹한 네트워크 토폴로지와 높은 확장성 확보

end to end 연결 방식(기존 연결 방식)에서는 빠른 전송 속도와 전송 결과를 신속하게 알 수 있지만, 특정 개체에 문제가 발생했을 때 연쇄적인 문제가 발생하기 쉽다.

pub/sub 모델에서는 데이터와 수신처 ID를 포함시켜 메시징 시스템으로 보내고 시스템의 교환기가 메시지 ID를 확인 후 해당 컨슈머의 큐에 전달한다. 컨슈머에서는 자기 큐에 메시지가 들어오면 메시지를 가져간다.

장점
1. 메시징 시스템만 살아 있으면 프로듀서에서 전달된 메시지가 유실되지 않는다.
2. 각각의 개체가 통신을 하는것이 아니라 메시징 시스템을 중심으로 연결되어 확장성이 용이하다.
3. 연결을 직접 건드리지 않고 교환기의 룰에 따라 메시지를 전달하므로 메시지 데이터 유실의 염려가 없다.

단점
1. 직접 통신을 하지 않기 때문에 전달 확인을 위해서는 코드가 복잡해진다.
2. 메시지 전달 속도가 상대적으로 느리다.


기존 메시징 시스템을 사용하는 Pub/Sub 모델은 대규모 데이터보다는 간단한 이벤트를 전송했다. 메시지의 보관, 교환, 전달 과정에서 신뢰성을 보장하는 것에 중점을 맞췄기 때문에 속도와 용량을 중요시하지 않았다.

카프카는 신뢰성 관리를 프로듀서와 컨슈머에게 넘기고, 메시징 전달 성능에 집중시킨 고성능 메시징 시스템이다.


카프카의 특징

  1. 프로듀서와 컨슈머의 분리
    연결 구조가 단순해지고 각자의 역할이 완벽하게 분리되어 연쇄적으로 문제가 발생할 확률이 매우 적다.

  2. 멀티 프로듀서, 멀티 컨슈머

  3. 디스크에 메시지 저장
    컨슈머가 메시지를 읽어가더라도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장한다. 트래픽이 일시적으로 폭주해 컨슈머의 처리가 늦어지더라도 카프카의 디스크에 안전하게 보관되어 있어, 컨슈머는 메시지의 손실 없이 가져갈 수 있다.

  4. 확장성
    3대의 브로커로 시작해 수십 대의 브로커로 확장 가능하다.

  5. 높은 성능
    분산 처리, 배치 처리 등 다양한 기법 사용


용어 정리

  • Kafka: 아파치 프로젝트 애플리케이션 이름. 클러스터 구성이 가능하며, 카프카 클러스터라고 부름
  • Broker: 카프카 애플리케이션이 설치되어 있는 서버 또는 노드
  • Topic: 프로듀서와 컨슈머들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임
  • Partition: 병렬처리가 가능하도록 토픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해 파티션의 수를 늘려줄 수 있음
  • Producer: 메시지를 생산하여 브로커의 토픽 이름으로 보내는 서버 또는 애플리케이션
  • Consumer: 브로커의 토픽 이름으로 저장된 메시지를 가져가는 서버 또는 애플리케이션

참고

[도서] 카프카, 데이터 플랫폼의 최강자 - 고승범, 공용준 저
[Line Engineering] LINE에서 Kafka를 사용하는 방법 - 1편
크루들이 들려주는 카카오페이 오픈소스 kafka 활용법

넘나 어려운데 팔수록 재밌는데 더 파면 난죽택일것같은 그 느낌

0개의 댓글