Kafka (카프카)
an open-source distributed event streaming platform
아파치 카프카는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트이다.
이 프로젝트는 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연 시간을 지닌 플랫폼을 제공하는 것이 목표이다.
하루에 1조4천억 건의 메시지를 처리하기 위해 LinkedIn이 개발한 내부 시스템으로 시작되었다.
Kafka는 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션이다.
Kafka 서버는 여러 데이터 센터에 분산되어 있을 수 있으며 여러 서버 인스턴스에 걸쳐 레코드 스트림(메시지)을 토픽으로 저장하여 데이터 지속성을 제공할 수 있다.
Apache Kafka 사용
- 서로 다른 구성 요소 간의 안정적인 데이터 교환
- 애플리케이션 요구 사항 변경에 따라 메시징 워크로드를 분할하는 기능
- 데이터 처리를 위한 실시간 스트리밍
- 데이터/메시지 재생에 대한 기본 지원
Apache Kafka 개념
Topics (토픽)
메시징 솔루션에서 토픽은 지정된 데이터 스트림(일련의 레코드/메시지)에 대한 관심을 표시하는 데 사용되는 주소 지정 가능한 추상화이다.
토픽은 게시 및 구독할 수 있으며 애플리케이션에서 주어진 데이터 스트림에 대한 관심을 표시하는 데 사용하는 추상화 계층이다.
Partitions (파티션)
토픽은 파티션이라는 일련의 순서 대기열로 세분화될 수 있다. 파티션은 연속적으로 추가되어 순차적 커밋 로그를 형성한다.
Kafka 시스템에서 각 레코드/메시지에는 지정된 파티션 메시지 또는 레코드를 식별하는데 사용되는 오프셋이라는 순차 ID가 할당된다.
Persistence (영속성)
레코드/메시지가 게시될 때 지속적으로 유지하는 서버 클러스터를 유지 관리하여 작동한다.
Kafka 클러스터는 구성 가능한 보존 시간 제한을 사용하여 소비에 관계없이 주어진 레코드가 지속되는 기간을 결정한다.
레코드/메시지가 보존 시간 제한 내에 있는 동안 레코드/메시지를 사용할 수 있다.
Topic/Partition Scaling (토픽/파티션 확장)
Kafka는 서버 클러스터로 작동하기 때문에 주어진 토픽/파티션에서 각 서버에 부하를 공유하여 토픽/파티션을 확장할 수 있다.
부하 공유를 통해 Kafka 클러스터의 각 서버는 주어진 토픽/파티션에 대한 레코드/메시지의 배포 및 영속성을 처리할 수 있다.
Producers (프로듀서)
Kafka의 프로듀서 개념은 대부분의 메시징 시스템과 마찬가지로 주어진 레코드/메시지가 게시되어야 하는 토픽(데이터 스트림)을 정의한다. 파티션은 추가 확장성을 제공하는 데 사용되므로 프로듀서는 주어진 레코드/메시지가 게시되는 파티션도 정의할 수 있다.
프로듀서는 주어진 파티션을 정의할 필요가 없으며 파티션을 정의하지 않음으로써 토픽 파티션에서 순차 대기 방식의 로드 밸런싱을 달성할 수 있다.
Consumers (컨슈머)
컨슈머는 레코드/메시지를 처리하는 엔터티이다.
컨슈머는 개별 워크로드에서 독립적으로 작업하거나 지정된 워크로드에서 다른 컨슈머와 협력하여 작업하도록 구성할 수 있다(로드 밸런싱)
컨슈머는 컨슈머 그룹 이름을 기반으로 워크로드를 처리하는 방법을 관리한다.
컨슈머 그룹 이름을 사용하면 컨슈머를 단일 프로세스 내, 여러 프로세스, 심지어 여러 시스템에 분산시킬 수 있다. 컨슈머 그룹 이름을 사용하여 컨슈머는 컨슈머 집합 전체에서 레코드/메시지 소비를 로드 밸런싱(동일한 컨슈머 그룹 이름을 가진 여러 컨슈머)하거나 토픽/파티션을 구독하는 각 컨슈머가 처리 메시지를 받도록 각 레코드/메시지를 고유하게 (고유한 컨슈머 그룹 이름을 가진 여러 컨슈머) 처리할 수 있다.
Kafka 이점
- 원활한 메시징 및 스트리밍 기능
- 데이터 재생을 위한 시간 기반 데이터 보존
- 스트림 처리를 위한 기본 접근 방식
- 기본 통합 지원
- connector API를 사용하여 애플리케이션은 사전 구축된 커넥터 또는 오픈 소스 도구를 통해 타사 솔루션, 기타 메시징 시스템 및 레거시 애플리케이션과 통합하거나 애플리케이션 요구 사항에 따라 의도적으로 커넥터를 구축할 수 있다.
STRIMZI
provides a way to run an Apache Kafka cluster on Kubernetes in various deployment configurations
References
'Cloud & DevOps > Distributed System & Kubernetes' 카테고리의 다른 글
[Cloud Native] [CI/CD] Tekton (0) | 2022.06.20 |
---|---|
[Serverless] Knative (0) | 2022.06.20 |
[Tracing] Jaeger (0) | 2022.06.20 |
[Service Mesh] Istio (0) | 2022.06.20 |
[MSA] Service Mesh (0) | 2022.06.20 |