-
1. Kafka란?SW개발/Kafka 2020. 9. 14. 21:36
1. Kafka?
카프카란 Apache에서 제공하는 분산형 메세지 큐(Message Queue)입니다. 여기서 메세지 큐란, 메시지 지향 미들웨어(Message Oriented Middleware: MOM, 분산 시스템 간 메시지를 주고 받는 기능을 지원하는 소프트웨어나 하드웨어 인프라)를 구현한 것으로, 간단하게 설명하면 여러 모듈들로부터 나오는 데이터를 특정 모듈들에 전달하기 위해 지나가는 중간통로를 의미합니다.
예를들어, 카프카가 개발되기 전 링크드인의 데이터 처리 시스템은 아래 그림과 같이 복잡하게 이루어져있었습니다.
위의 그림은 엔드투엔드(end to end) 연결방식의 아키텍쳐인데, 이 아키텍쳐는 많은 문제점이 있습니다.
첫째로, 실시간 트랜잭션(OLTP) 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없으니 복잡도가 증가할 수밖에 없고, 이 때문에 문제를 발견하고 조치를 취하려면 이와 관련된 여러 데이터 시스템을 확인해야합니다.
둘째로, 데이터 파이프라인 관리의 어려움이 있습니다. 위의 그림을 보면 하둡, 실시간 트랜잭션 DB 등 많은 데이터 시스템들이 있는데, 이 시스템에 저장된 동일한 데이터를 개발자나 개발 부서는 각기 다른 방법으로 파이프라인을 만들고 유지하게되면서 관리가 어려워지게됩니다.
카프카는 위의 문제를 해결하기위해 아래와 같은 목표를 가지고 새로운 시스템을 만들었고, 그 결과는 아래 그림과 같습니다.
- 프로듀서와 컨슈머의 분리
- 메시징 시스템과 같이 영구 메세지 데이터를 여러 컨슈머에게 허용
- 높은 처리량을 위한 메시지 최적화
- 데이터가 증가함에 따라 스케일아웃이 가능한 시스템
2. 기본적인 동작원리
Kafka는 기본적으로 중앙에 메시징 시스템 서버를 두고 메시지를 보내고(publish 또는 producer) 받는(subscribe 또는 consumer) 펍/섭(Pub/Sub) 모델을 사용합니다. 펍/섭 모델은 비동기 메시징 전송방식으로, 발신자의 메시지에는 수신자가 정해져 있지 않은 상태로 발행(publis)하고, 구독(Subscribe)을 신청한 수신자만 정해진 메시지를 수신할 수 있는 방식을 말합니다. Kafka는 이 Pub/Sub 모델을 사용하여 메시지 큐의 역할을 하고 있습니다.
3. 특징
기존의 메시징 시스템은 메시지의 보관, 교환, 전달 과정에서 신뢰성을 보장하는 것에 중점을 뒀기 때문에 속도와 용량은 그렇게 중요하지 않았고, 때문에 일부 컴포넌트나 원격 통신밖에 적용되지 못했습니다.
하지만, 카프카는 기존의 메시징 시스템이 지닌 성능의 단점을 극복하기 위해, 메시지 교환 전달의 신뢰성 관리를 Producer와 Consumer에 넘기고, 부하가 많이 걸리는 교환기 기능 역시 Consumer가 만들 수 있게 함으로써 메시징 시스템 내에서의 작업량을 줄여서 고성능 메시징 시스템을 만들 수 있었습니다.
Kafka의 특징은 아래와 같습니다
- Producer와 Consumer 분리
=> 역할 분리를 통해 어느 한쪽에 문제가 발생하더라도 연쇄작용이 발생할 확률이 낮아진다. - Multi Producer, Multi Consumer
=> 중앙 집중형 구조로 구성할 수 있게함 - 디스크에 메시지 저장
=> 트래픽이 일시적으로 폭주해 컨슈머의 처리가 늦어지더라도 저장된 데이터를 통해 메시지 손실 없이 메시지를 가져갈 수 있음. - 확장성
=> 브로커를 기본 3대 -> 여러대로 확장가능 - 높은 성능
'SW개발 > Kafka' 카테고리의 다른 글
6. Consumer (0) 2020.09.20 5. Producer (1) (0) 2020.09.18 4. kafka 구조 (0) 2020.09.17 3. Kafka broker의 주요 설정(properties) (0) 2020.09.16 2. zookeeper(주키퍼) (0) 2020.09.15