반응형
Kafka는 LinkedIn에서 개발되어 현재는 Apache Software Foundation이 관리하는 오픈 소스 스트림 처리 플랫폼입니다. 대량의 데이터를 실시간으로 처리하고, 저장하며, 이동시키는 데 사용되는 분산 메시징 시스템입니다. 카프카는 고성능, 확장성, 내구성, 신뢰성을 제공하며, 여러 소스에서 대량의 데이터를 수집하고 여러 시스템으로 데이터를 전달하는 역할을 합니다.
주요 개념
- 프로듀서(Producer): 데이터를 생성하고 카프카 시스템에 전송하는 역할을 합니다.
- 컨슈머(Consumer): 카프카로부터 데이터를 읽어가는 역할을 합니다.
- 브로커(Broker): 카프카 서버의 노드를 의미하며, 프로듀서로부터 메시지를 받아 저장하고 컨슈머에게 메시지를 전달합니다.
- 토픽(Topic): 메시지의 분류를 위한 카테고리나 주제를 의미합니다. 프로듀서는 메시지를 특정 토픽에 발행하고, 컨슈머는 관심 있는 토픽의 메시지를 구독합니다.
- 파티션(Partition): 토픽은 여러 파티션으로 나뉠 수 있으며, 이는 데이터의 병렬 처리와 확장성을 가능하게 합니다.
특징
- 분산 시스템: 카프카는 기본적으로 분산 시스템으로 설계되어 있어, 데이터를 여러 서버(브로커)에 걸쳐 분산 저장할 수 있습니다. 이는 데이터의 병렬 처리와 고가용성을 보장합니다.
- 확장성: 카프카 클러스터는 수평적으로 확장이 가능합니다. 즉, 처리량을 증가시키기 위해 더 많은 서버를 추가할 수 있으며, 이 과정에서 데이터의 재분배나 다운타임 없이 확장이 가능합니다.
- 내구성과 신뢰성: 카프카는 메시지를 디스크에 저장하고, 메시지의 복제본을 여러 브로커에 걸쳐 저장하여 내구성과 고가용성을 확보합니다. 또한, 메시지 손실 위험을 최소화하며, 시스템 장애 발생 시에도 데이터 손실 없이 복구할 수 있습니다.
- 높은 처리량: 카프카는 높은 처리량을 달성하기 위해 설계되었습니다. 카프카는 배치 처리와 메시지 압축 기능을 통해 네트워크 및 I/O 부하를 최소화하며, 이를 통해 초당 수십만 건의 메시지를 처리할 수 있습니다.
- 실시간 스트림 처리: 카프카는 실시간으로 데이터 스트림을 처리할 수 있습니다. 이는 실시간 분석, 모니터링, 이벤트 기반 애플리케이션 등 다양한 분야에서 활용될 수 있습니다.
- 다양한 클라이언트 언어 지원: 카프카는 Java, Scala를 비롯하여 Python, Go, Ruby 등 다양한 프로그래밍 언어를 지원하는 클라이언트 라이브러리를 제공합니다. 이를 통해 다양한 언어로 작성된 애플리케이션에서 카프카를 쉽게 사용할 수 있습니다.
- 커넥터 API와 스트림 API: 카프카는 외부 시스템과의 연결을 용이하게 하는 커넥터 API와, 스트림 처리를 위한 스트림 API를 제공합니다. 이를 통해 수집, 변환, 저장을 쉽게 구현할 수 있으며, 복잡한 스트림 처리 로직도 구현할 수 있습니다.
장점
- 고성능과 확장성: 카프카는 높은 처리량을 유지하면서도 수평 확장이 가능하므로, 대규모 데이터 스트림을 효율적으로 처리할 수 있습니다.
- 내구성과 신뢰성: 데이터를 디스크에 저장하고, 다중 복제를 통해 데이터 손실의 위험을 최소화합니다. 이로 인해 시스템의 내구성과 신뢰성이 높아집니다.
- 실시간 스트림 처리: 카프카는 실시간 데이터 스트림 처리를 지원하며, 거의 실시간으로 데이터를 수집하고 처리할 수 있습니다.
- 다양한 시스템과의 통합: 커넥터 API와 스트림 API를 통해 다양한 외부 시스템과 쉽게 통합할 수 있으며, 다양한 프로그래밍 언어를 지원합니다.
- 높은 가용성: 카프카 클러스터는 높은 가용성을 보장하며, 서버 장애가 발생해도 서비스의 지속적인 운영이 가능합니다.
단점
- 복잡한 시스템 관리: 카프카의 확장성과 높은 내구성을 유지하기 위해서는 클러스터 관리, 토픽 구성, 파티션 관리 등 복잡한 설정과 관리 작업이 필요합니다.
- 학습 곡선: 카프카의 다양한 기능과 개념을 이해하고 효율적으로 사용하기 위해서는 상당한 학습 시간이 필요합니다.
- 리소스 사용량: 고성능을 제공하기 위해 카프카는 상대적으로 많은 시스템 리소스(특히 디스크 I/O와 네트워크 대역폭)를 사용할 수 있습니다.
- 데이터 삭제 정책: 카프카는 기본적으로 데이터를 시간이나 크기 기준으로만 삭제합니다. 세밀한 데이터 관리가 필요한 경우, 추가적인 로직을 구현해야 할 수 있습니다.
- 트랜잭션 관리의 복잡성: 카프카에서 트랜잭션을 관리하는 것은 전통적인 데이터베이스 시스템에 비해 복잡할 수 있으며, 이로 인해 애플리케이션 로직이 복잡해질 수 있습니다.
면접 대비
- 카프카란 무엇인가요?
- 카프카는 분산 스트리밍 플랫폼으로, 대규모의 실시간 데이터 스트리밍을 처리하는 데 사용됩니다. 이는 높은 확장성과 내결함성을 제공하여 신속한 데이터 전달 및 처리를 가능하게 합니다.
- 카프카의 핵심 구성 요소는 무엇인가요?
- 카프카의 핵심 구성 요소는 데이터를 생성하고 카프카 시스템으로 전송하는 Producer, 카프카로부터 데이터를 읽어가는 Consumer, 카프카 서버의 노드를 의미하며, 프로듀서로부터 메시지를 받아 저장하고 컨슈머에 전달하는 Broker, 메시지의 분류를 위한 카테고리나 주제인 Topic, 데이터 병렬 처리와 확장성을 가능하게 하는 Partition이 있습니다.
- 카프카의 주요 특징은 무엇인가요?
- 수평적으로 확장 가능한 아키텍처를 가지고 있어 대규모 데이터 처리에 적합하고, 데이터의 복제 및 복구 기능을 제공하여 데이터 손실을 방지합니다. 또한, 낮은 지연 시간과 데이터 처리량이 매우 큰 환경에서도 높은 성능을 유지합니다.
- 카프카와 기존의 메시징 시스템과의 차이점은 무엇인가요?
- 카프카는 기존의 메시징 시스템과 비교하여 높은 확장성과 내결함성을 제공합니다. 또한, 디스크에 데이터를 영속적으로 저장하여 데이터의 오래된 이력을 보존할 수 있습니다. Pub/Sub 모델과 대조적으로 Topic과 Partition을 통해 데이터를 관리하며, Consumer 그룹을 통해 데이터의 병렬 처리를 가능하게 합니다.
- 카프카 Consumer 그룹이 무엇인가요?
- 카프카 Consumer 그룹은 토픽에서 데이터를 읽어오는 Consumer들의 그룹입니다. 이 그룹은 동일한 그룹 내의 Consumer들 간에 Topic의 Partition을 공유하여 데이터를 병렬로 처리합니다.
오늘은 Kafka에 대해서 알아보았습니다.
메시지 큐 관련해서 RabbitMQ도 함께 알아보면 좋습니다!
2024.03.28 - [IT] - [메시지 큐] RabbitMQ란? (개념, 특징, 장/단점, 면접 대비)
반응형
'IT' 카테고리의 다른 글
[NoSQL] MongoDB란? (개념, 특징, 장단점, 면접대비) (1) | 2024.04.02 |
---|---|
[Spark With Livy] Livy, Spark (개념, 특징, 장단점, 면접 대비) (0) | 2024.04.01 |
[메시지 큐] RabbitMQ란? (개념, 특징, 장/단점, 면접 대비) (0) | 2024.03.28 |
[Hadoop] Impala란? (개념, 특징, 장단점, 면접 대비) (0) | 2024.03.27 |
[PostgreSQL] Citus란? (개념, 장단점, 면접 대비) (0) | 2024.03.26 |