최근에 아파치 카프카(Apache Kafka)에 대한 관심이 생겨서 공부를 하게 되었다.
이 글에서는 아파치 카프카에 대한 정의 및 특징에 대해 정리를 해 볼 것이다.
글의 진행 순서는 다음과 같다.
1. 아파치 카프카(Apache Kafka)란 무엇인가?
2. 아파치 카프카 탄생 배경
3. 아파치 카프카의 용어
4. 아파치 카프카의 용어
5. 아파치 카프카의 특징
1. 아파치 카프카(Apache Kafka)란 무엇인가?
아파치 카프카(Apache Kafka)는 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼이다. 비즈니스 중심의 소셜 네트워크 서비스를 하는 링크드인(LinkedIn)에서 출발해 2011년 초 아파치 공식 오픈소스로 세상에 공개되었다. 많은 기업들이 자사의 빅데이터를 기반으로 사용자의 성향을 분석해 앞으로의 고객 행위 등을 예측하는 추천 기술에 관심을 가지기 시작하면서, 아파치 카프카는 빅데이터를 분석할 때 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 필수도구로 인식되고 있으며, 넷플릭스, 에어비엔비, 마이크로소프트, 카카오 등에서 데이터 파이프라인으로서 매우 중요하게 사용되고 있다.
2. 아파치 카프카 탄생 배경
1) 실시간 트랜잭션(OLTP) 처리와 비동기 처리가 동시에 이루어지는 시스템에서 통합된 전송영역 부재로 인한 시스템 복잡도 증대. 시스템 복잡도 증대로 인한 운영 업무(장애 대처, 업그레이드, 하드웨어 증설) 작업 시 많은 작업 시간 소요
2) OLTP 데이터베이스, 아파치 하둡, 모니터링 시스템, key-value 저장소 등 다양한 데이터 시스템들이 통합되지 않은 서로 다른 파이프라인을 가지고 있어, 데이터 통합 분석을 위한 데이터 파이프라인 연결 시 데이터 포맷 및 처리방식등이 달라 파이프라인 확장 및 조정이 어려우며, 시스템 간 데이터가 불일치하는 문제 발생
3. 아파치 카프카 용어
1) 브로커(Broker) : 아파치 카프카 애플리케이션이 설치되어 있는 서버 또는 노드
2) 토픽(Topic) : 프로듀서(Producer)와 컨슈머(Consumer)들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임. 다수의 프로듀서, 컨슈머들이 동일한 카프카를 사용하게 되면, 메시지들이 서로 뒤섞여 각자 자신이 원하는 메시지를 얻기가 어렵기 때문에 토픽이라는 이름으로 이를 구분하기 위해 사용함
3) 프로듀서(Producer) : 메시지를 생산하여 브로커의 토픽 이름으로 보내는 서버 또는 애플리케이션
4) 컨슈머(Consumer) : 브로커의 토픽 이름으로 저장된 메시지를 가져가는 서버 또는 애플리케이션
5) 파티션(Partition) : 병렬처리가 가능하도록 토픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해 파티션의 수를 늘려줄 수 있음
6) 주키퍼(ZooKeeper) : 분산 애플리케이션을 위한 코디네이션 시스템. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중함. 컨슈머 혹은 카프카와 직접 통신하면서 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공
4. 아파치 카프카 구조
5. 아파치 카프카의 특징
1) 메시징를 보내는 역할과 받는 역할이 완벽하게 분리된 펍/섭 방식을 적용 : 각각의 서버/서비스들은 모니터링이나 분석 시스템의 상태 유무와 상관없이 카프카로 메시지를 보내는 역할만 하면 되고, 모니터링이나 분석 시스템들도 서비스 서버들의 상태 유무와 관계 없이 카프카에 저장되어 있는 메시지를 가져오기만 하면 됨. 때문에 역할이 완벽하게 분리되면서 어느 한쪽 시스템에서 문제가 발생하더라도 다른 시스템에 영향을 미칠 확률이 매우 낮아지며, 서버가 추가되더라도 카프카로만 보내면 되기 때문에 서버 추가에 대한 부담감을 줄일 수 있음
2) 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조 : 하나의 프로듀서가 하나 또는 그 이상의 토픽으로 메시지를 보낼 수 있으며, 컨슈머도 하나 또는 그 이상의 토픽으로부터 메시지를 가져올 수 있음
3) 디스크에 메시지를 저장하고 유지 : 컨슈머가 메시지를 읽어도 정해져 있는 보관 주기 동안 디스크에 메시지를 저장해둠. 그렇기 때문에 트래픽이 일시적으로 많아지거나 컨슈머에 오류가 있더라도 메시지 손실 없이 작업이 가능함
4) 확장이 매우 용이함 : 하나의 카프카 클러스터는 3대의 브로커로 시작해 수십대의 브로커로 무중단으로 확장이 가능함.
5) 성능이 매우 높음 : 고성능을 유지하기 위해 카프카는 내부적으로 분산처리. 배치처리 등 다양한 기법을 사용하고 있음(2015년 8월 기준 링크드인에서는 1조개의 메시짖를 생성하고 1페타바이트 이상의 데이터를 처리함)
참고
- 카프카, 데이터 플랫폼의 최강자 - 고승범. 공용준 지음
- https://data-flair.training/blogs/kafka-architecture/
'IT > MSA' 카테고리의 다른 글
아파치 카프카 실행 에러(Classpath is empty. Please build the project first e.g. by running) (0) | 2020.11.22 |
---|---|
리눅스에 주키퍼(zookeeper) 설치하기 (0) | 2020.11.05 |
Jaeger를 활용한 분산 환경 서비스 로그 트레이싱(SpringBoot, Spring Cloud Gateway 활용) (1) | 2020.07.11 |
Zipkin과 ElasticSearch, Kibana 연동하기 (1) | 2020.07.05 |
Zipkin과 Sleuth를 활용한 분산 환경 로그 트레이싱 (1) | 2020.06.23 |
댓글