Apache Kafka는 스트림 처리, 실시간 데이터 파이프라인 및 대규모 데이터 통합에 사용되는 오픈 소스 분산 스트리밍 시스템입니다. 2011년에 LinkedIn에서 실시간 데이터 피드를 처리하기 위해 처음 개발된 Kafka는 메시지 대기열에서 초당 100만개 이상의 메시지 또는 매일 조 단위의 메시지를 처리할 수 있는 종합 이벤트 스트리밍 플랫폼으로 빠르게 진화했습니다.
Apache Kafka를 만든 사람들이 설립한 Confluent는 가장 포괄적인 Kafka 튜토리얼, 교육, 서비스 및 지원을 제공합니다. 또한 Confluent는 모든 클라우드 환경에 맞게 구축된 완전 관리형 클라우드 네이티브 데이터 스트리밍 서비스를 제공하여 최신 데이터 인프라 요구 사항에 대한 확장성과 안정성을 보장합니다.
Kafka에는 수많은 이점이 있습니다. 오늘날 Kafka는 거의 모든 산업에서 포춘지 선정 100대 기업 중 80% 이상이 크고 작은 수많은 사용 사례에 사용하고 있습니다. 개발자 및 아키텍트가 최신 세대의 확장 가능한 실시간 데이터 스트리밍 애플리케이션을 구축하는 데 사용하고 있는 사실상의 표준(de facto) 기술입니다. 이러한 작업은 시장에서 사용할 수 있는 다양한 기술로 수행할 수 있지만 Kafka가 이처럼 널리 사용되는 주된 이유는 다음과 같습니다.
Kafka는 고속 및 대용량 데이터를 처리할 수 있으며 초당 수백만 개의 메시지를 처리할 수 있어 여러 서버에 걸쳐 실시간 데이터 처리 및 통합이 필요한 애플리케이션에 이상적입니다.
Kafka Cluster는 최대 1,000개의 브로커로 확장해, 하루에 수조 개의 메시지와 페타바이트 규모의 데이터를 처리할 수 있습니다. Kafka의 분할된 로그 모델을 사용하면 저장 용량과 처리 용량을 탄력적으로 확장하거나 축소할 수 있습니다. 이러한 확장성을 통해 Apache Kafka는 방대한 데이터 소스와 스트림을 지원할 수 있습니다.
Kafka는 지연 시간이 2ms에 불과한 머신 클러스터를 사용하여 대량의 메시지를 전달할 수 있습니다. 실시간 데이터 처리와 데이터 스트림에 대한 즉각적인 응답을 요하는 애플리케이션에는 이렇게 지연 시간이 짧은 것이 매우 중요합니다.
Kafka는 내구성과 내결함성이 뛰어난 분산형 클러스터에 데이터 스트림을 안전하게 저장하고 보안을 유지합니다. 따라서 데이터 기록을 안정적으로 저장하고 서버 장애가 발생해도 데이터에 접근할 수 있습니다. 나아가, 분할된 로그 모델은 Kafka의 데이터 스트림 관리 기능을 강화하고 정확한 1회 처리를 보장합니다.
Kafka는 가용성 영역에 걸쳐 클러스터를 효율적으로 확장하거나 여러 지역에 걸쳐 클러스터를 연결할 수 있습니다. 이렇게 높은 가용성을 통해 데이터 손실 위험 없이 Kafka의 내결함성을 높입니다. Kafka는 여러 구독자와 외부 스트림 처리 시스템을 원활하게 관리할 수 있도록 설계되었습니다.
Apache Kafka는 효율적인 실시간 데이터 수집, 스트리밍 데이터 파이프라인, 분산 시스템 전반의 스토리지를 가능하게 하는 스토리지 레이어와 컴퓨팅 레이어로 구성되어 있습니다. Kafka와 외부 시스템 간의 데이터 스트리밍 간소화를 촉진하도록 설계되어 실시간 데이터를 쉽게 관리하고 모든 유형의 인프라 내에서 확장할 수 있습니다.
데이터 스트리밍 플랫폼의 핵심은 생성된 데이터를 바로 처리하고 분석할 수 있게 하는 것입니다. Kafka Streams API는 즉각적인 처리를 지원하는 강력하고 가벼운 라이브러리로, 이를 통해 집계, 윈도윙 매개변수 생성, 스트림 내 데이터 결합 작업 등을 수행할 수 있습니다. Kafka를 기반으로 Java 애플리케이션으로 구축되어 별도의 클러스터를 관리할 필요 없이 워크플로의 연속성을 유지할 수 있습니다.
Kafka는 분산 데이터베이스에서 흔히 볼 수 있는 분산 커밋 로그를 추상화하여 내구성이 뛰어난 스토리지를 제공합니다. 이를 통해 Kafka는 '정보 소스' 역할을 하여, 단일 데이터 센터 내 또는 여러 가용성 영역 전반에서 가용성이 뛰어난 배포를 위해 여러 노드에 데이터를 분산할 수 있습니다. 내구성이 뛰어나고 영구적인 스토리지로 서버에 장애가 발생해도 데이터 무결성과 안정성을 보장합니다.
Kafka는 간단하고 변경 불가능한 커밋 로그를 제공합니다. 사용자는 이를 구독하고 원하는 수의 시스템 또는 실시간 애플리케이션으로 데이터를 게시할 수 있습니다. 기존 메시징 큐와 달리 Kafka는 고도로 확장 가능한 내결함성 분산 시스템입니다. 덕분에 Kafka는 개별 애플리케이션에서 회사 전체 배포로 확장할 수 있습니다. 예를 들어, Uber에서는 승객과 운전자 매칭을 관리하고, British Gas에서는 스마트 홈에 실시간 분석 및 예측 유지보수를 제공하며, LinkedIn에서의 수많은 실시간 서비스를 수행하는 데 Kafka가 사용됩니다.
일반적으로 실시간 스트리밍 데이터 파이프라인과 실시간 스트리밍 애플리케이션을 구축하는 데 사용되는 Kafka는 다양한 사용 사례를 지원합니다. 데이터에 의존하거나 데이터를 다루는 기업이라면 어디든 Kafka를 사용해 다양한 이점을 얻을 수 있습니다.
Apache Kafka에서 스트리밍 데이터 파이프라인이란, 소스에서 나온 데이터를 생성 즉시 Kafka에서 수집한 다음 Kafka에서 해당 데이터를 하나 이상의 대상으로 스트리밍하는 것을 의미합니다. 이렇게 하면 각기 다른 시스템에 걸쳐 데이터가 빈틈 없이 통합되고 데이터 흐름이 효율적으로 이루어집니다.
스트림 처리에는 필터, 결합, 맵, 집계, 기타 변환 같은 작업이 포함되며 기업에서 다양한 사용 사례를 지원하는 데 활용합니다. Apache Kafka를 위해 구축된 스트림 처리 라이브러리 Kafka Streams는 기업의 실시간 데이터 처리를 지원하기 때문에 즉각적으로 데이터를 처리하고 분석해야 하는 애플리케이션에 적합합니다.
Kafka는 이벤트 전달 처리율이 높습니다. 여기에 Druid와 같은 오픈 소스 기술을 결합하면 강력한 스트리밍 분석 관리자(SAM)를 구성할 수 있습니다. Druid가 있으면 Kafka의 스트리밍 데이터를 사용해 분석 쿼리가 가능해집니다. 먼저 Kafka에 이벤트가 로드된 다음 Kafka 브로커에서 버퍼링됩니다. 그러면 Druid 실시간 작업자가 이를 사용하여 실시간 분석을 하고 의사 결정을 내립니다.
Kafka를 사용한 실시간 ETL은 Kafka Connect 소스, 다른 데이터베이스, 애플리케이션 또는 API에서 데이터를 소비하고 생성하는 데 사용되는 싱크 커넥터, Kafka Connect의 옵션 기능인 단일 메시지 변환(SMT), 실시간 대규모 연속 데이터 처리를 위한 Kafka Streams 등 다양한 구성 요소와 기능을 결합하여 데이터를 효율적으로 변환하고 통합합니다.
Apache Kafka는 확장성, 효율성, 속도 등 마이크로서비스가 목표로 하는 속성을 구현하는 동시에, 마이크로서비스 오케스트레이션과 관련된 많은 문제를 해결하기 때문에 마이크로서비스에서 가장 많이 사용되는 도구입니다. Kafka는 서비스 간 통신을 촉진하여 매우 짧은 지연 시간과 내결함성을 유지합니다. 따라서 강력하고 확장 가능한 마이크로서비스 아키텍처를 구축하는 데 필수적입니다.
조직에서 Kafka의 기능을 사용하면 매우 효율적인 데이터 파이프라인을 구축하고, 실시간으로 데이터 스트림을 처리하고, 고급 분석을 수행하고, 확장 가능한 마이크로서비스를 개발함으로써 최신 데이터 기반 애플리케이션의 요건을 충족할 수 있습니다.
몇몇 세계 최대 브랜드가 사용하는 Kafka: