728x90
반응형
00. Kafka란?
Kafka는 분산 데이터 스트리밍 플랫폼으로, 대량의 실시간 데이터를 처리하고 저장하는데 사용되는 오픈 소스 솔루션이다.
아파치 카프카(Apache Kafka)라는 이름으로도 잘 알려져 있다. 이는 LinkedIn에서 개발된 후에 아파치 소프트웨어 재단에 기증되어 개발 및 관리되고 있다.
Kafka는 다양한 애플리케이션 간에 데이터 스트림을 안정적으로 전달하고, 실시간으로 데이터를 처리, 분석하고 저장하는 데 사용된다.
대표적인 특징으로 높은 처리량, 순서 보장, 적어도 한 번 전송 방식(At least Once), 강력한 파티셔닝, 자연스러운 백프레셔 핸들링, 로그 컴팩션 같은 기능이 존재한다.
▶ 순서 보장
: 이벤트 처리 순서가 보장되면서, 엔티티 간의 유효성 검사나 동시 수정 같은 무수한 복잡성들이 제거됨으로써 구조 또한 매우 간결해졌다.
▶ 적어도 한 번 전송 방식
- 분산된 여러 네트워크 환경에서의 데이터 처리에서 중요한 모범 사례는 '멱등성'이다.
- '멱등성'이란 동일한 작업을 여러 번 수행하더라도 결과가 달라지지 않는 것을 의미한다. 따라서 프로듀서가 재전송을 하더라도 데이터 변화는 일어나지 않는다.
- 백엔드 시스템들이 중복 메시지 처리가 가능하도록 허용된다면 복잡한 트랜잭션 처리 또한 필요하지 않게 된다. 이로 인한 아키텍처는 더욱 단순해지고 처리량 또한 높아진다.
▶ 자연스로운 백프레셔 핸들링
- 카프카의 클라이언트는 풀[pull] 방식으로 동작한다. 풀 방식의 장점으로는 자기 자신의 속도로 데이터를 처리할 수 있다는 점이다.
- 반면 푸시[push] 방식은 브로커가 보내주는 속도에 의존해야 한다는 한계가 있다.카
- 성능과 편리함에 집중하고자 풀 방식을 채택한 카프카 클라이언트는 복잡한 피드백이나 제한의 요구사항이 사라져 매우 간단하고 편리하게 클라이언트를 구현할 수 있다.
▶ 강력한 파티셔닝
- 카프카의 파티셔닝 기능을 이용하면, 논리적으로 토픽을 여러 개로 나눌 수 있다.
01. Kafka의 주요 특징
▶ 높은 처리량과 낮은 지연시간
- 카프카는 매우 높은 처리량과 낮은 지연시간을 자랑한다.
- kafka, Pulsar, RabbitMQ를 비교한 결과를 보면 처리량이 가장 높은 것은 카프카이며 응답 속도가 가장 빠른 것은 RabbitMQ이다.
- 하지만 처리량과 응답 속도를 함께 비교하면 카프카가 돋보적이다.
▶ 높은 확장성
- 카프카는 손쉬운 확장이 가능하도록 설계된 애플리케이션이다.
- 후에 관련된 글 업로드 할 예정이다.
▶ 고가용성
- Kafka는 클러스터 내 리플리케이션[replication] 기능을 추가했고, 이를 통해 카프카 클러스터의 고가용성이 확보되었다.
- 카프카 내부 동작 관련 게시글에서 관련 내용을 업로드 할 예정이다.
▶ 내구성
- 프로듀서는 카프카로 메시지를 전송할 때, 프로듀서의 acks라는 옵션을 조정하여 메세지의 내구성을 강화할 수 있다.
- 강력한 내구성을 원한다면 acks=all로 설정하면 된다. 이 기능을 활성화 할 경우, 프로듀서에 의해 카프카로 전송되는 모든 메시지는 안전한 저장소인 카프카의 로컬 디스크에 저장된다.
- 이렇게 할 경우, 컨슈머가 메시지를 가져가더라도 메시지는 삭제되지 않고 지정된 설정 시간 또는 로그의 크기만큼 로컬 디스크에 보관되므로, 코드의 버그나 장애가 발생하더라도 과거의 메시지들을 불러와 재처리할 수 있다.
▶ 개발 편의성
- 카프카는 메시지를 전송하는 역할을 하는 프로듀서[producer]와 메시지를 가져오는 역할을 하는 컨슈머[consumer]가 완벽하게 분리되어 동작하고 서로 영향을 주지도 받지도 않는다.
- 이러한 구성에 따라 원하는 기능만 개발할 수 있기 때문에 개발 편의성이 향상된다.
- 또한 개발 편의성을 제공하기 위해 카프카에서는 카프카 커넥트[kafka connect]와 스키마 레지스트리[Schema Registry]를 제공한다.
- 스키마 레지스트리는 카프카를 사용하는 많은 개발자가 데이터 활용보다는 데이터를 파싱하는 데 많은 시간을 소모하는 매우 비효율적인 현실을 보완하고자 스키마를 정의해서 사용할 수 있도록 개발된 애플리케이션이다.
- 카프카 커넥트는 프로듀서와 컨슈머를 따로 개발하지 않고도 카프카와 연동해 손쉽게 소스와 싱크로 데이터를 보내고 받을 수 있는 별도의 애플리케이션이다.
- 카프카 커넥트는 엘라스틱서치[Elasticsearch]. HDFS 등 다양한 소스와 싱크를 제공하므로 개발 편의성을 높일 수 있다.
03. Kafka의 기본 구성
- 카프카는 데이터를 받아서 전달하는 데이터 버스[Data bus]의 역할을 한다.
- 카프카에 데이터(메시지)를 만들어서 주는 쪽을 프로듀서[Producer]라 부른다.
- 카프카에서 데이터(메시지)를 소비하는 쪽을 컨슈머[Consumer]라 한다.
- Zookeeper는 카프카의 정상 동작을 보장하기 위해 메타데이터(metadata)를 관리하는 코디네이터[coodinator]라 한다. 브로커들의 노드 관리 등을 하고 있다로 이해하면 충분하다.
728x90
반응형
'CS > Apache Kafka' 카테고리의 다른 글
[Kafka - 03] 프로듀서의 내부 동작 원리와 구현, 중복 없는 전송 (0) | 2023.08.31 |
---|---|
[Kafka - 02] 카프카의 내부 동작 원리와 구현 (1) | 2023.08.25 |
[Kafka - 01] 카프카 기본 개념과 구조 (2) | 2023.08.23 |
Kafka 초기 설정 방법 - (Topic 생성 및 확인, Producer/Consumer 설정) (0) | 2023.05.08 |