Apache Kafka는 실시간 데이터 처리와 스트리밍에 필요한 강력한 도구입니다. 대용량 데이터를 빠르게 이동하고 처리하는 데 적합하며, 로그 처리, 데이터 스트리밍 등 다양한 분야에서 활용됩니다. 이번 글에서는 Kafka가 무엇인지, 등장배경과 주요 개념 등을 알아보겠습니다.
Kafka(카프카)란?
카프카는 대용량의 실시간 데이터 스트림 처리를 위한 고성능 분산 이벤트 스트리밍 플랫폼이며 pub-sub 모델의 메시지 큐 형태로 동작을 합니다. 카프카는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 처리에 적합하며, 분산 아키텍처로 설계되어 확장성과 내고장성을 가지고 있습니다.
등장배경
링크드인(Linked-Id)은 수억 명의 사용자와 연결되어 있는 소셜 네트워크 서비스로, 효율적인 데이터 처리와 대용량 데이터 스트림을 실시간으로 처리하는 요구사항이 증가하였습니다. 기존의 데이터 처리 시스템은 증가하는 요구사항을 해결하기에는 어려움이 있었으며, 이를 해결하기 위해 Kafka를 개발하였습니다.
기존의 링크드인의 데이터 처리 시스템은 여러 파이프라인으로 분산(파편화)되어 있으며, 시스템 복잡도가 높은 문제가 있었습니다. 이로 인해 새로운 시스템을 추가하거나 기존 시스템을 확장하기에 어려움이 있었습니다.
이를 해결하기 위해 새로운 시스템의 개발 필요성이 높아졌고, 다음과 같은 목표를 가지고 시스템을 개발합니다.
- Producer(프로듀서)와 Consumer(컨슈머) 분리
- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용
- 높은 처리량을 위한 메시지 최적화
- 트래픽 증가에 따른 Scale-Out(스케일 아웃)이 가능한 시스템
카프카를 적용한 후의 링크드인 데이터 처리 시스템입니다. 카프카를 적용함으로써 모든 이벤트/데이터의 흐름을 중앙에서 관리할 수 있게 되었습니다. 또한 새로운 서비스나 시스템이 추가될 때 표준 데이터 포맷을 따르기 때문에 연결과 통합이 용이해집니다. Pub-Sub 모델의 메시지 큐 형태로 동작하여 분산환경에 특화되어 있습니다.
주요 개념 및 구성
Topic(토픽)
데이터를 구분하기 위한 단위로 데이터의 카테고리나 주제별로 토픽을 생성하여 데이터를 구분합니다. 프로듀서는 메시지를 생성하여 특정 토픽으로 전송하고, 컨슈머는 해당 토픽에서 메시지를 소비합니다. 1개 이상의 파티션으로 구성되어 있습니다.
Partition(파티션)
토픽은 1개 이상의 파티션으로 구성되어 있으며, 파티션은 물리적인 저장 단위입니다. 파티션은 여러 브로커에 분산하여 저장됩니다.(append-only 저장) 파티션은 고유한 offset(오프셋)을 가지고 있으며 파티션 내에 메시지의 위치를 식별하는 값으로 컨슈머가 특정 위치부터 메시지를 읽을 수 있게 합니다.
Producer(프로듀서)
메시지를 생성하고 카프카 클러스터로 메시지를 전송하는 역할을 합니다. 특정 토픽으로 보내 컨슈머가 메시지를 소비할 수 있도록 합니다.
Consumer(컨슈머)
토픽에서 데이터를 읽고 처리하는 클라이언트로 특정 토픽을 구독(Subscribe)하여 해당 토픽에 있는 메시지를 가져오는 역할을 합니다. 컨슈머는 브로커에게 요청하여 해당 토픽의 메시지를 가져오고 받은 메시지를 소비하고 처리합니다.
Broker(브로커)
카프카 클러스터를 구성하는 노드로 생산자와 소비자의 중재자 역할을 합니다. 메시지를 저장하고 관리하며, 프로듀서와 컨슈머 간의 통신을 조정합니다. 프로듀서와 컨슈머는 별도의 애플리케이션인 반면 브로커는 카프카 서버입니다.
Zookeeper(주키퍼)
분산 코디네이션 서비스이며, 카프카 클러스터의 메테데이터를 중앙에서 관리하는 역할을 합니다. 최근에는 주키퍼의 종속성을 제거하고 위한 작업을 진행하고 있으며 4.0 버전에서는 주키퍼를 완전히 제거할 계획입니다.
토픽과 파티션, 오프셋
프로듀서에서 1개의 메시지가 생성되면 특정 토픽에 속하게 되며, 토픽은 1개 이상의 파티션으로 구성됩니다. 메시지는 파티션 내에서 고유한 오프셋을 가지며, 이를 통해 컨슈머는 특정 위치부터 메시지를 읽을 수 있습니다.
Kafka 특징
실시간 데이터 스트리밍
카프카는 메시지 큐와 같은 역할을 수행하여 실시간으로 데이터를 처리할 수 있습니다. 이를 통해 실시간 데이터 분석, 모니터링, 로그 처리 등 다양하게 사용됩니다.
분산 아키텍처
카프카는 여러 개의 브로커로 구성된 분산 아키텍처를 가지고 있습니다. 이는 데이터의 안정성과 확장성을 보장합니다. 데이터는 여러 브로커에 분산되므로 고가용성과 장애 허용 기능을 제공합니다.
영속성
카프카는 다른 메시지 플랫폼과 다르게 전송받은 메시지를 메모리가 아닌 파일 시스템에 저장합니다. 따라서 종료가 되더라도 데이터의 유실 없이 보존됩니다.
확장성
카프카는 수평적으로 확장 가능한 구조를 가지고 있습니다. 새로운 브로커를 추가함으로써 처리할 수 있는 데이터 양을 증가시킬 수 있으며, 클러스터에 대한 부하 분산이 가능합니다.
함께 보면 좋은 글
Hadoop이란 무엇인가?
Hadoop이란 무엇인가? Hadoop(High-Availability Distributed Object-Oriented Platform) Hadoop은 대용량 데이터를 처리하기 위한 오픈소스 프레임워크로, 현재 많은 기업과 조직에서 대용량 데이터 처리에 활용되고
dev-records.tistory.com
'Big Data' 카테고리의 다른 글
파이썬으로 Kafka 간단한 예제 (0) | 2023.06.30 |
---|---|
Data Lake와 Data Warehouse, Data Mart 개념과 비교 (0) | 2023.06.16 |
Colab + Spark 활용한 간단한 예제 (0) | 2023.06.05 |
Apache Spark란? (0) | 2023.06.02 |
Hadoop YARN이란 무엇인가? (0) | 2023.05.27 |
댓글