Apache Kafka란?

Apache Kafka는 별도의 시작이나 끝이 없는 스트리밍 이벤트 데이터 또는 일반 데이터를 수집, 처리, 저장하는 데 널리 사용되는 이벤트 스트리밍 플랫폼입니다. Kafka는 차세대 분산 애플리케이션이 확장을 통해 스트리밍 이벤트를 분당 수십억 개까지 처리할 수 있도록 합니다.

Apache Kafka와 Google Cloud Pub/Sub 같은 이벤트 스트리밍 시스템이 등장하기 전의 데이터 처리는 일반적으로 원시 데이터를 먼저 저장했다가 나중에 임의의 시간 간격으로 처리하는 주기적인 일괄 작업으로 다뤄져 왔습니다. 예를 들어 통신 회사에서는 하루, 한 주 또는 한 달이 지날 때까지 기다렸다가 수백만 건의 통화 기록을 분석하고 누적 요금을 계산할 수 있습니다.

일괄 처리의 한계 중 하나는 실시간이 아니라는 점입니다. 적시에 비즈니스 결정을 내리고 흥미로운 일이 발생할 경우 조치를 취하기 위해 데이터를 실시간으로 분석하고자 하는 조직은 점점 많아지고 있습니다. 예를 들어 앞서 언급한 통신 회사에서는 전반적인 고객 경험을 향상시킬 한 가지 방법으로 고객에게 실시간 요금을 알려주는 것이 도움이 될 수 있습니다.

여기서 이벤트 스트리밍의 필요성이 발생합니다. 이벤트 스트리밍은 데이터의 시간적 가치를 포착하는 것은 물론 흥미로운 일이 발생할 때마다 조치를 취하는 푸시 기반 애플리케이션을 만들기 위해 이벤트가 생성되는 대로 이벤트의 무한 스트림을 지속적으로 처리하는 프로세스입니다. 이벤트 스트리밍의 예로는 고객 대면 웹 애플리케이션에서 생성되는 로그 파일을 지속적으로 분석하는 것, 사용자가 전자상거래 웹사이트를 탐색할 때 고객 행동을 모니터링하고 그에 대응하는 것, 소셜 네트워크에서 생성되는 클릭 스트림 데이터의 변화를 분석하여 고객 감정에 지속적으로 영향을 미치는 것, 사물 인터넷(IoT) 기기에서 생성되는 원격 분석 데이터를 수집하고 그에 대응하는 것 등이 포함됩니다.

Confluent Cloud가 Google Cloud에서 제공하는 통합된 완전 관리형 Apache Kafka에 대해 알아보세요.

Apache Kafka의 개요

Kafka는 스트리밍 데이터를 가져와 정확히 언제 무슨 일이 일어났는지를 기록합니다. 이 레코드를 변경 불가능한 커밋 로그라고 합니다. 변경 불가능하다고 하는 것은 레코드를 추가할 수는 있지만 달리 변경할 수는 없기 때문입니다. 여기에서 로그를 구독(데이터에 액세스)할 수 있으며, 개수 제한 없이 여러 스트리밍 실시간 애플리케이션과 다른 시스템에서 로그에 게시(데이터 추가)할 수도 있습니다.

예를 들어 Kafka를 사용하여 웹사이트에서 스트리밍되는 모든 트랜잭션 데이터를 가져와서, 실시간으로 제품 판매량을 추적하고 이를 제품 재고량과 비교한 다음 적시에 재고 보충이 이루어질 수 있도록 하는 애플리케이션을 제공할 수 있습니다.

Kafka의 이점

오픈소스로 제공

오픈소스란 소스 코드가 누구에게나 무료로 제공되며 사용자가 어떤 목적으로든 이를 수정하여 고유한 버전으로 배포할 수 있다는 것을 의미합니다. 라이선스 요금이나 다른 제한사항은 없습니다. 또한 Kafka는 함께 협력하고 참여하는 글로벌 개발자 커뮤니티를 두고 커뮤니티로부터 도움을 받습니다. 그 결과, Kafka는 광범위한 커넥터, 플러그인, 모니터링 도구, 구성 도구를 제공하여 생태계의 지속적인 성장에 기여합니다.

확장성 및 속도

Kafka는 지속적으로 증가하는 데이터 양에 따라 확장될 뿐만 아니라 비즈니스 전반에서 해당 데이터를 실시간으로 제공합니다. 분산 플랫폼이라는 것도 Kafka의 주요 이점입니다. 이는 처리가 여러 개의 물리적 또는 가상 머신으로 분할된다는 것을 의미합니다. 여기에는 두 가지 장점이 있습니다. 하나는 일부 작업에서 더 많은 처리 능력이나 스토리지가 필요할 때 수평 확장을 통해 머신을 추가할 수 있다는 것이고, 다른 하나는 개별 머신에서 장애가 발생하더라도 플랫폼이 계속 실행되기 때문에 안정적이라는 것입니다. 하지만 Kafka의 이 기능은 대규모로 관리하기가 매우 어려울 수 있습니다.

관리형 서비스로서의 Kafka

Kafka는 그 모든 장점에도 불구하고 배포하기가 까다로운 기술입니다. 온프레미스 Kafka 클러스터는 프로덕션 환경에서 설정, 확장, 관리하기가 어렵습니다. Kafka를 실행할 온프레미스 인프라를 설정할 때는 머신을 프로비저닝하고 Kafka를 구성해야 합니다. 또한 분산형 머신의 클러스터를 설계하여 가용성을 보장하고, 데이터가 저장 및 보호되는지 확인하고, 모니터링을 설정하고, 부하 변화에 맞춰 데이터를 신중하게 확장해야 합니다. 그런 다음 인프라를 유지보수하여 장애가 있는 머신을 교체하고 일상적인 패치 및 업그레이드를 수행해야 합니다.

또 다른 접근 방식은 클라우드에서 관리형 서비스로 제공되는 Kafka를 활용하는 것입니다. 제3자 공급업체에서 Kafka 인프라의 프로비저닝, 구축 및 유지보수를 담당하고, 개발자는 애플리케이션을 빌드하고 실행합니다. 이렇게 하면 특정 Kafka 인프라의 관리에 관한 전문 지식이 없이도 간편하게 Kafka를 배포할 수 있으므로 인프라 관리 시간을 줄이고 비즈니스 가치를 창출하는 데 더 많은 시간을 할애할 수 있습니다.

Kafka의 작동 방식

Kafka는 다음과 같은 5가지 핵심 기능을 통해 스트리밍 이벤트 처리를 지원합니다.

게시

데이터 소스에서는 데이터 이벤트 스트림을 하나 이상의 Kafka 주제, 즉 유사한 데이터 이벤트의 그룹에 게시하거나 배치할 수 있습니다. 예를 들어 네트워크 라우터 같은 IoT 기기에서 스트리밍되는 데이터를 확보한 후 예측 유지보수를 통해 라우터가 고장날 가능성이 있는 시기를 계산하는 애플리케이션에 해당 데이터를 게시할 수 있습니다.

소비

애플리케이션에서는 하나 이상의 Kafka 주제를 구독하거나 하나 이상의 Kafka 주제에서 데이터를 가져와 결과 데이터 스트림을 처리할 수 있습니다. 예를 들어 애플리케이션이 여러 소셜 미디어 스트림에서 데이터를 가져온 후 이를 분석하여 브랜드에 관한 온라인 대화의 경향을 확인할 수 있습니다.

처리

Kafka Streams API는 하나 이상의 주제에서 들어오는 데이터 스트림을 소비하고 하나 이상의 주제로 나가는 데이터 스트림을 생성하는 스트림 프로세서의 역할을 할 수 있습니다.

연결

Kafka 주제를 기존 애플리케이션에 연결하는 재사용 가능한 생산자 또는 소비자 연결을 구축할 수도 있습니다. Dataproc, BigQuery 등의 주요 서비스에 대한 커넥터를 포함하여 이미 사용 가능한 수백 개의 기존 커넥터가 있습니다.

저장

Apache Kafka는 내구성 있는 스토리지를 제공합니다. Kafka는 '정보 소스'의 역할을 할 수 있으며, 가용성이 높은 배포를 위해 단일 데이터 센터 내 또는 여러 가용성 영역의 여러 노드에 데이터를 분산시킬 수 있습니다.