Apache Kafka 기본
Kafka란?
- 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시지 플랫폼
- Kafka는 Pub-Sub 모델의 메시지 큐이다.
- 분산 환경에 특화되는 특징을 가지고 있다.
- 링크드인(LinkedIn)에서 서비스의 확장으로 인한 여러 메시지 큐 시스템을 관리하기 어려워 사내 프로젝트로 개배라 시작, 2011년 초 아파치 공식 오픈소스로 세상에 공개되었다.
Kafka 특징
- Producer와 Consumer의 분리
- 카프카는 메시징 전송 방식 중 메시지를 보내는 역할과 받는 역할이 완벽하게 분리된 Pub-Sub 방식을 적용한다.
- 각자의 역할이 완벽하게 분리되면서, 어느 한쪽 시스템에서 문제가 발생하더라도 연쇄작용이 발생할 확률은 매우 낮다.
- 멀티 프로듀서, 멀티 컨슈머
- 카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있다.
- 데이터 분석 및 처리 프로세스에서 하나의 데이터를 다양한 용도로 사용하는 요구가 많아지기 시작했고, 멀티 기능 덕분에 이러한 요구를 손쉽게 충족할 수 있다.
- 디스크에 메시지 저장
- 디스크에 메시지를 저장하고 유지한다.
- 컨슈머가 메시지를 읽어가더라도 보관 주기 동안 디스크에 메시지를 저장해둔다.
- 확장성
- 카프카는 확장이 매우 용이하도록 설계되어 있다. 하나의 카프카 클러스터는 3대의 브로커로 시작해 수집 대의 브로커로 확장 가능하다.
- 확장 작업은 카프카 서비스의 중단 없이 온라인 상태에서 작업이 가능하다.
- 높은 성능
- 고성능을 유지하기 위해 카프카는 내부적으로 분산 처리, 배치 처리 등 다양한 기법을 사용하고 있다.
Kafka 구성 요소
- Event
- Event는 Kafka에서 Producer와 Consumer가 데이터를 주고 받는 단위이다.
- 이벤트 혹은 메시지라고도 한다.
- Producer
- Producer는 Kafka에 이벤트를 게시(Post)하는 클라이언트 어플리케이션을 의미한다.
- Consumer
- Consumer는 이런한 Topic을 구독하고 이로부터 얻어낸 이벤트를 처리하는 클라이언트 어플리케이션이다.
- Topic
- 이벤트가 쓰이는 곳이다.
- Producer는 이 Topic에 이벤트를 게시한다.
- 그리고 Consumer는 Topic으로 부터 이벤트를 가져와 처리한다.
- Topic은 파일 시스템의 폴더와 유사하며, 이벤트는 폴더안에 파일과 유사하다.
- Topic에 저장된 이벤트는 필요한 만큼 다시 읽을 수 있다.
- Partition
- Topic는 여러 Broker에 분산되어 저장되며, 이렇게 분석된 Topic을 Partition이라고 한다.
- 어떤 이벤트가 Partition에 저장될지는 이벤트 key(키)에 의해 정해지며, 같은 키를 가지는 이벤트는 항상 같은 Partition에 저장된다.
- Kafka는 Topic의 Partion에 지정된 Consumer가 항상 정확히 동일한 순서로 Partition의 이벤트를 읽을 것을 보장한다.
Kafka 주요 개념
- Producer와 Consumer의 분리
- Producer와 Consumer는 완전 별개로 동작한다.
- Producer는 Broker의 Topic에 메시지를 게시하기만 한다.
- Consumer는 Broker의 특정 Topic에서 메세지를 가져와 처리하기만 한다.
- Producer와 Consumer는 완전 별개로 동작한다.
- Push와 Pull 모델
- 소비된 메세지 추적(Commit과 Offset)
- Consumer Group
- 메시지(이벤트) 전달 컨셉