Apache Kafka란 무엇인가요?

2025년 4월 30일

8분

작성자

Ian Smalley

Senior Editorial Strategist

Apache Kafka란 무엇인가요?

Apache Kafka는 실시간 데이터를 처리하는 오픈소스 분산형 이벤트 스트리밍 플랫폼입니다. Kafka는 이벤트 기반 애플리케이션을 지원하고 신뢰할 수 있는 데이터 파이프라인을 구축하는 데 탁월하며, 지연 시간이 짧고 처리량이 높은 데이터 전송을 제공합니다.

오늘날 수십억 개의 데이터 소스는 종종 시스템이나 환경에서 발생하는 모든 상황을 기록하는 기본 데이터 구조, 즉 이벤트 형태로 정보 스트림을 지속적으로 생성합니다. 

일반적으로 이벤트는 프로세스의 일부로 다른 작업을 유도하는 작업입니다. 고객의 주문, 항공편 좌석 선택, 등록 양식 제출 등이 모두 이벤트의 예입니다. 이벤트에는 사람이 개입할 필요가 없습니다. 예를 들어, 연결된 온도 조절기가 특정 시점의 온도를 보고하는 것도 이벤트에 해당합니다.

이벤트 스트리밍은 애플리케이션이 새로운 정보에 즉시 응답할 수 있는 기회를 제공합니다. Apache Kafka와 같은 스트리밍 데이터 플랫폼을 통해 개발자는 각 이벤트의 순서와 안정성을 유지하면서 데이터가 도착하는 즉시 소비, 처리 및 작동하는 시스템을 구축할 수 있습니다.

Kafka는 가장 널리 사용되는 이벤트 스트리밍 플랫폼으로 발전하였으며, 매일 조 단위의 기록을 눈에 띄는 성능 지연 없이 수집하고 처리하여 확장 가능한 볼륨을 지원합니다. Target, Microsoft, AirBnB, Netflix를 비롯한 포춘 500대 기업 중 80% 이상이 Kafka를 사용하여 실시간 데이터 기반의 고객 경험을 제공하고 있습니다.

Apache Kafka의 기원

2011년 LinkedIn은 방대한 양의 실시간 이벤트 데이터를 처리할 수 있는, 처리량이 많고 지연 시간이 짧은 시스템에 대한 회사의 증가하는 요구를 충족하기 위해 Apache Kafka를 개발했습니다. Java와 Scala를 사용하여 구축된 Kafka는 나중에 오픈소스로 제공되어 Apache Software Foundation에 기부되었습니다.

조직들은 이미 기존 메시지 대기열 시스템(예: AWS의 Amazon SQS)을 지원하거나 사용하고 있었지만, Kafka는 근본적으로 다른 메시지 시스템 아키텍처를 도입했습니다.

소비 후 메시지를 삭제하는 기존 메시지 대기열과 달리 Kafka는 구성 가능한 기간 동안 메시지를 보존하므로, 여러 소비자가 동일한 데이터를 독립적으로 읽을 수 있습니다. 이러한 기능 덕분에 Kafka는 메시징 및 이벤트 소싱, 스트림 처리, 실시간 데이터 파이프라인 구축에 이상적입니다.

오늘날 Kafka는 이벤트 스트리밍의 실질적 표준이 되었습니다. Kafka를 사용하는 산업으로는 금융, 전자상거래, 통신, 운송 등이 있으며, 이러한 산업에서는 대량의 데이터를 빠르고 안정적으로 처리하는 기능이 필수적입니다.

Apache Kafka의 작동 방식

Kafka는 분산형 플랫폼입니다. 따라서 여러 서버와 여러 데이터 센터에 걸쳐 운영될 수 있는 내결함성, 고가용성 클러스터로 실행됩니다.

Kafka의 세 가지 주요 기능은 다음과 같습니다.

  1. 애플리케이션이 데이터 또는 이벤트 스트림을 게시하거나 구독할 수 있도록 지원합니다.
  2. 발생한 순서대로 레코드를 정확하게 저장하며, 뛰어난 내결함성과 내구성을 자랑하는 스토리지를 제공합니다.
  3. 레코드가 발생하는 즉시 실시간으로 처리합니다.

생산자(애플리케이션 또는 주제)는 레코드가 서로 상대적인 순서대로 저장되는 '로그'라는 주제에 레코드를 작성합니다. 그런 다음, 주제를 파티션으로 분할하고 Kafka 브로커(서버) 클러스터에 분산합니다.

Kafka는 각 파티션 내에서 레코드의 순서를 유지하고 구성 가능한 보존 기간 동안 디스크에 견고하게 저장합니다. 파티션 내에서는 순서가 보장되지만 파티션 간에는 그렇지 않습니다. 애플리케이션의 요구 사항에 따라 소비자는 이러한 파티션에서 실시간으로 또는 특정 오프셋에서 독립적으로 읽을 수 있습니다.

Kafka는 파티션 복제를 통해 안정성을 보장합니다. 각 파티션에는 리더(한 브로커에 있음)와 다른 브로커에 하나 이상의 팔로워(복제본)가 있습니다. 이러한 복제는 데이터 손실 없이 노드 장애를 허용하는 데 도움이 됩니다.

역사적으로 Kafka는 분산형 브로커를 위한 중앙 집중식 조정 서비스인 Apache ZooKeeper에 의존했습니다. ZooKeeper는 일부 브로커가 실패하더라도 Kafka 브로커가 동기화된 상태로 유지되도록 보장했습니다. 2011년 Kafka는 KRaft(Kafka Raft Protocol) 모드를 도입하여 이러한 작업을 Kafka 브로커 자체에 통합하여 ZooKeeper의 필요성을 제거했습니다. 이러한 전환은 외부 종속성을 줄이고, 아키텍처를 간소화하고, Kafka 클러스터의 내결함성을 높이고, 관리 및 확장을 용이하게 합니다.

고속도로 조감도

클라우드에 집중 


AI 시대의 멀티클라우드 설정을 최적화하는 방법에 대한 전문가의 안내가 담긴 주간 Think 뉴스레터를 받아보세요.

Apache Kafka API

개발자는 4가지 주요 애플리케이션 프로그래밍 인터페이스(API)를 통해 Kafka의 기능을 활용할 수 있습니다.

  1. Producer API
  2. 소비자 API
  3. Streams API
  4. Connector API
Producer API

Producer API를 사용하면 애플리케이션이 Kafka 주제에 스트림을 게시할 수 있습니다. 주제에 기록된 레코드는 변경하거나 삭제할 수 없습니다. 대신, 미리 구성된 시간 동안, 이틀 동안 또는 스토리지 공간이 소진될 때까지 항목에 남아 있습니다.

소비자 API

Consumer API를 통해 애플리케이션은 하나 이상의 주제를 구독하고 주제에 저장된 스트림을 수집 및 처리할 수 있습니다. 주제의 레코드를 실시간으로 작업하거나 과거 레코드를 수집 및 처리할 수 있습니다.

Streams API

이 API는 Producer API와 Consumer API를 기반으로 하며, 애플리케이션이 연속적인 프론트-백스트림 처리를 수행할 수 있도록 복합 처리 기능을 추가합니다. 특히 Streams API에는 하나 이상의 주제에서 레코드를 소비하고, 필요에 따라 레코드를 분석, 집계 또는 변환하고, 결과 스트림을 동일한 주제 또는 다른 주제에 게시하는 작업이 포함됩니다.

Producer API와 Consumer API는 간단한 스트림 처리에 사용할 수 있지만, Streams API를 사용하면 보다 정교한 데이터 및 이벤트 스트리밍 애플리케이션을 개발할 수 있습니다.

Connector API

이 API를 통해 개발자는 재사용 가능한 생산자 또는 소비자인 커넥터를 구축하여 데이터 소스를 Kafka 클러스터에 통합하는 작업을 간소화하고 자동화할 수 있습니다.

Apache Kafka 사용 사례

개발자는 주로 다음의 두 가지 종류의 애플리케이션을 만드는 데 Kafka를 사용합니다.

  • 실시간 스트리밍 데이터 파이프라인
  • 실시간 스트리밍 애플리케이션

실시간 스트리밍 데이터 파이프라인

엔터프라이즈 시스템 간에 수백만 개의 데이터 또는 이벤트 레코드가 대규모로 실시간으로 이동하도록 특별히 설계된 애플리케이션입니다. 이 앱은 손상, 데이터 중복, 또는 엄청난 양의 데이터가 고속으로 이동할 때 일반적으로 발생하는 기타 문제의 위험 없이 안정적으로 이동해야 합니다.

예를 들어, 금융 기관은 Kafka를 사용하여 결제 게이트웨이, 사기 탐지 서비스, 회계 시스템에서 초당 수천 건의 거래를 스트리밍하여 중복이나 손실 없이 정확하고 실시간의 데이터 흐름을 보장합니다.

실시간 스트리밍 애플리케이션

레코드 또는 이벤트 스트림에 의해 구동되고 자체 스트림을 생성하는 애플리케이션입니다. 디지털 중심의 세상에서 우리는 매일 이러한 앱을 접합니다.

제품 가용성을 실시간으로 업데이트하는 전자상거래 사이트 또는 실시간 사용자 활동을 기반으로 맞춤형 콘텐츠 및 광고를 제공하는 플랫폼이 그 예입니다. Kafka는 이러한 경험을 강화하기 위해 사용자 상호작용을 분석 및 추천 엔진으로 직접 스트리밍합니다.

기타 Apache Kafka 사용 사례

  • 마이크로서비스: Kafka는 비동기식 이벤트 기반 메시징을 지원하여 마이크로서비스 간의 커뮤니케이션이 용이하게 합니다. 이 기능을 사용하면 서비스가 긴밀한 결합 없이도 다른 서비스에서 작업을 트리거할 수 있으므로 확장가능한 시스템 아키텍처를 지원할 수 있습니다.
  • 컨테이너화된 클라우드 네이티브 환경: Kafka는 컨테이너화를 위해 Docker를 사용하고 컨테이너 오케스트레이션을 위해 Kubernetes를 사용하여 클라우드 네이티브 플랫폼과 원활하게 통합됩니다. 이러한 설정은 확장 가능하고 내결함성이 있는 이벤트 기반 통신을 지원하는 동시에 수동 인프라 관리의 필요성을 최소화합니다. Kafka는 Kubernetes 내에서 자동으로 확장하고 장애를 복구할 수 있으므로, 다양한 애플리케이션 워크로드를 실행하는 동적 클라우드 컴퓨팅 환경에 이상적입니다.
  • 데이터 레이크와 데이터 웨어하우징: Kafka는 데이터 레이크 또는 데이터 웨어하우스와 같은 데이터 소스와 저장 플랫폼 사이에서 실시간 데이터 파이프라인 역할을 합니다. 이 기능을 사용하면 시기적절한 수집 및 분석을 위해 대용량 데이터를 스트리밍할 수 있는데, 이는 최신 분석 및 비즈니스 인텔리전스 워크플로에 필수적입니다.
  • 사물인터넷(IoT) 데이터 처리: Kafka는 IoT 디바이스에서 지속적인 데이터 스트림을 처리하는 데 적합하며, 처리량이 많고 지연 시간이 짧은 데이터를 데이터베이스, 분석 엔진 또는 모니터링 툴과 같은 대상으로 실시간 라우팅할 수 있습니다. 이 기능은 제조 및 의료와 같은 산업에서 시간에 민감한 애플리케이션을 지원합니다.
AI 아카데미

하이브리드 클라우드로 AI 지원 실현하기

IBM 사고 리더들이 이끄는 이 커리큘럼은 비즈니스 리더들에게 성장을 촉진하는 AI 투자의 우선순위를 정하는 데 필요한 지식을 제공합니다.

Apache Kafka 에코시스템

Kafka는 여러 다른 기술과 통합되며, 그 중 다수는 Apache Software Foundation(ASF)에 속해 있습니다. 조직들은 일반적으로 대규모 이벤트 기반 아키텍처, 스트림 처리 또는 빅데이터 분석 솔루션에 이러한 기술을 사용합니다.

이러한 기술 중 일부는 오픈소스인 반면, Kafka를 중심으로 구축된 플랫폼인 Confluent는 대규모 실시간 데이터 처리를 위한 엔터프라이즈급 기능과 관리형 서비스를 제공합니다. IBM, Amazon Web Services 등과 같은 기업은 확장 가능한 이벤트 스트리밍을 위해 Kafka와 통합되는 Kafka 기반 솔루션(예: IBM Event Streams, Amazon Kinesis)을 제공합니다.

Apache Kafka 에코시스템에는 다음이 포함됩니다.

  • Apache Spark
  • Apache NiFi
  • Apache Flink
  • Apache Hadoop
  • Apache Camel
  • Apache Cassandra

Apache Spark

Apache Spark는 대규모 데이터 처리를 위한 분석 엔진입니다. Apache Kafka에서 제공하는 스트림에 대한 분석을 수행하고, 클릭스트림 분석과 같은 실시간 스트림 처리 애플리케이션을 생성할 수 있습니다.

Apache NiFi

Apache NiFi는 시각적인 드래그 앤 드롭 인터페이스를 갖춘 데이터 흐름 관리 시스템입니다. NiFi는 Kafka 생산자 및 Kafka 소비자로 실행할 수 있기 때문에 Kafka가 해결할 수 없는 데이터 흐름 문제를 관리하는 데 이상적입니다.

Apache Flink

Apache Flink는 일관되게 빠른 속도와 짧은 지연 시간으로 이벤트 스트림에서 대규모 계산을 수행하기 위한 엔진입니다. Flink는 스트림을 Kafka 소비자로 수집하고, 이러한 스트림을 기반으로 실시간 작업을 수행하고, Kafka 또는 다른 애플리케이션에 대한 결과를 게시할 수 있습니다.

Apache Hadoop

Apache Hadoop은 빅데이터 분석, 머신 러닝, 데이터 마이닝, 그리고 정형 및 비정형 데이터를 처리하는 기타 데이터 기반 애플리케이션에 사용할 수 있도록 대량의 데이터를 컴퓨터 클러스터에 저장할 수 있는 분산형 소프트웨어 프레임워크입니다. Kafka는 클러스터에 대한 실시간 스트리밍 데이터 파이프라인을 만드는 데 자주 사용됩니다.

Apache Camel

Apache Camel은 규칙 기반 라우팅 및 중재 엔진을 갖춘 통합 프레임워크입니다. Kafka를 구성 요소로 지원하므로 다른 시스템(예: 데이터베이스, 메시징 대기열)과 데이터 통합을 쉽게 할 수 있습니다. 이러한 이유로 Kafka는 더 큰 이벤트 기반 아키텍처의 일부가 될 수 있습니다.

Apache Cassandra

Apache Cassandra는 단일 장애 지점 없이 여러 상용 서버에서 대량의 데이터를 처리하도록 설계된 확장 가능한 NoSQL 데이터베이스입니다.

Kafka는 일반적으로 실시간 데이터 수집과 확장 가능한 내결함성 애플리케이션을 구축하기 위해 Cassandra로 데이터를 스트리밍하는 데 사용됩니다.

Kafka와 RabbitMQ 비교

RabbitMQ는 애플리케이션, 시스템, 서비스가 메시지 브로커를 변환하여 통신할 수 있도록 하는 인기 오픈소스 메시지 브로커입니다. Kafka는 메시지 브로커로 시작했고(지금도 메시지 브로커로 사용할 수 있음), RabbitMQ는 게시/구독 메시징 모델을 지원하기 때문에, Kafka와 RabbitMQ는 종종 대안으로 비교되기도 합니다. 하지만 각기 다른 용도로 사용되며 다양한 유형의 사용 사례를 처리하도록 설계되었습니다.  예를 들어, Kafka 주제에는 여러 명의 가입자가 있을 수 있지만, 각 RabbitMQ 메시지에는 한 명의 가입자만 있을 수 있습니다. 또한, Kafka 주제는 내구성이 있는 반면, RabbitMQ 메시지는 일단 소비되면 삭제됩니다.

둘 중 하나를 선택할 때는 처리량, 메시지 내구성, 지연 시간과 같은 애플리케이션의 특정 요구 사항을 고려하는 것이 중요합니다. Kafka는 대규모 이벤트 스트리밍에 적합하며, RabbitMQ는 유연한 메시지 라우팅과 지연 시간이 짧은 처리가 필요한 시나리오에 적합합니다.

Apache Kafka와 오픈소스 AI

Apache Kafka와 오픈소스 AI를 통합하면 조직이 실시간 데이터와 인공 지능을 처리하는 방식을 혁신할 수 있습니다. 오픈소스 AI 툴과 결합된 Kafka를 이용하면 사전 학습된 AI 모델을 라이브 데이터에 적용하여 실시간 의사 결정과 자동화를 지원할 수 있습니다.

오픈소스 AI는 인공 지능에 대한 접근성을 높였고, Kafka는 실시간으로 데이터를 처리하는 데 필요한 인프라를 제공합니다. 이러한 설정을 사용하면 일괄 처리가 필요 없으므로, 기업은 데이터가 생성되는 즉시 해당 데이터에 대한 조치를 취할 수 있습니다.

예를 들어, 전자상거래 회사에서는 클릭이나 제품 조회와 같은 고객 상호작용을 발생 시점에 스트리밍하기 위해 Kafka를 사용할 수 있습니다. 사전 학습된 AI 모델이 이러한 데이터를 실시간으로 처리하여 개인화된 추천 또는 맞춤형 제품/서비스를 제공합니다. Kafka는 데이터 흐름을 관리하고, AI 모델은 들어오는 데이터에 기반한 조정을 수행하여 고객 참여를 개선합니다.

실시간 데이터 처리를 AI 모델과 결합함으로써 조직은 사기 탐지, 예측적 유지보수 또는 동적 가격 책정에 대한 의사 결정을 더욱 빠르게 내릴 수 있어 대응력을 높이고 효율적인 시스템을 구축할 수 있습니다.

Apache Kafka의 이점

  • 실시간 데이터 처리: Kafka는 실시간 데이터 파이프라인과 스트리밍 애플리케이션을 지원합니다. 이를 통해 시스템은 기록 스트림을 게시, 구독 및 처리할 수 있으며 모니터링, 경고, 분석과 같은 사용 사례를 지원할 수 있습니다.
  • 뛰어난 성능 및 확장성: Kafka 주제는 성능에 영향을 주지 않고 동시에 많은 소비자에게 서비스를 제공할 수 있도록 분할되고 복제됩니다.
  •  보안 및 규정 준수: Apache Kafka는 구성 가능한 액세스 제어와 더불어, 전송 중 데이터와 저장 데이터 모두에 대한 암호화를 지원합니다. 이러한 기능을 통해 조직은 민감한 데이터를 보호하고 산업 규정 준수 표준을 효과적으로 준수할 수 있습니다.
  • 높은 가용성: Kafka는 여러 브로커에서 데이터 복제를 통해 높은 가용성을 보장합니다. 메시지는 노드에 장애가 발생하더라도 계속 사용할 수 있으며, 시스템은 데이터 손실이나 가동 중단 없이 계속 실행됩니다.
  •  관리 간소화: Kafka에는 운영 부담을 줄이는 데 도움이 되는 모니터링, 구성 및 자동화 툴이 포함되어 있습니다. 오케스트레이션 및 관리 플랫폼과 잘 통합되므로 배포 및 확장을 보다 쉽게 관리할 수 있습니다. 또한 Kafka는 JMX(Java Management Extensions)를 통해 자세한 성능 및 상태 지표를 노출하므로, 팀은 효과적인 모니터링 및 용량 계획에 중요한 처리량, 지연 시간, 브로커 상태, 소비자 지연을 추적할 수 있습니다.
  • 광범위한 통합: Kafka는 다양한 커넥터 및 클라이언트 API를 통해 데이터베이스, 파일 시스템, 클라우드 서비스와 쉽게 통합됩니다. 예를 들어, Kafka Connect는 시스템 간의 원활한 데이터 이동을 촉진하는 반면, Kafka Streams는 실시간 스트림 처리를 가능하게 하여 통합 기능을 더욱 향상시킵니다.