Apache Kafka
AirBnB, Netflix, Pinterest 등 웹에서 최고의 인기를 얻고 있는 실시간 이벤트 기반 사용자 경험을 뒷받침하는 오픈 소스 스트리밍 기술인 Apache Kafka에 관해 알아봅니다.
검은색과 파란색의 추상 이미지
Apache Kafka란?

Apache Kafka(Kafka)는 실시간 이벤트 기반 애플리케이션 개발을 지원하는 것을 비롯하여 많은 이점을 가진 오픈 소스 분산형 스트리밍 플랫폼입니다. 이것은 무엇을 의미할까요?

오늘날 수십억 개에 달하는 데이터 소스로부터 끊임없이 데이터 레코드의 스트림이 생성되고 있습니다. 여기에는 이벤트 스트림도 포함됩니다. 이벤트란 일어난 활동 및 그 시간에 관한 디지털 기록입니다. 일반적으로 이벤트는 어떤 프로세스의 일환으로 또 다른 활동을 촉발하는 활동입니다. 고객이 주문하고, 항공기 좌석을 선택하고, 등록 양식을 제출하는 것 모두 이벤트에 해당합니다. 이벤트에 사람이 꼭 개입할 필요는 없습니다. 예컨대 연결된 온도 조절 장치가 특정 시점에 온도를 알려주는 것도 이벤트입니다.

이러한 스트림 덕분에 애플리케이션이 데이터나 이벤트에 실시간으로 응답하는 것이 가능해집니다. 개발자는 스트리밍 플랫폼을 통해 매우 빠른 속도로, 그리고 올바른 발생 순서를 기준으로 탁월한 충실도와 정확성을 발휘하면서 이러한 스트림을 소비하고 처리하는 애플리케이션을 빌드할 수 있습니다.

LinkedIn에서 2011년, 자체적으로 사용할 처리 성능이 우수한 메시지 브로커로 Kafka를 개발했습니다. 그리고 Kafka의 소스를 공개하고 Apache Software Foundation(ibm.com 외부 링크)에 기증했습니다. 오늘날 Kafka는 가장 널리 쓰이는 스트리밍 플랫폼으로 발전했습니다. 매일 단위의 레코드를 입수하고 처리할 수 있으며, 볼륨이 늘더라도 인지할 만한 성능 저하는 발생하지 않습니다. Target, Microsoft, AirBnB, Netflix와 같은 Fortune 500대 기업에서 Kafka를 활용하여 고객에게 실시간 데이터 기반 경험을 제공합니다.

다음 동영상(9:10)에서 Kafka에 관해 더 자세히 알아볼 수 있습니다.

Kafka의 작동 방식

Kafka에는 3가지 주요 기능이 있습니다.

  1. 애플리케이션에서 데이터 또는 이벤트 스트림을 게시하거나 구독할 수 있게 합니다.
  2. 장애가 발생하더라도 안전하고 안정적인 방식으로 정확하게 (이를테면 생성된 순서대로) 레코드를 저장합니다.
  3. 레코드를 (생성되는 순서대로) 실시간 처리합니다.

개발자는 4가지 API를 통해 이러한 Kafka 기능을 활용할 수 있습니다.

  • 생산자 API(Producer API): 애플리케이션에서 어떤 Kafka 토픽에 스트림을 게시하는 것이 가능합니다. 토픽(topic)이란 이름이 지정된 로그이며, 레코드를 생성되는 상대적 순서대로 저장합니다. 어떤 토픽에 기록된 레코드는 변경하거나 삭제할 수 없습니다. 미리 구성된 기간(예: 2일) 동안, 또는 스토리지 공간이 소진될 때까지 해당 토픽에 남아 있습니다.
  • 소비자 API(Consumer API): 애플리케이션에서 하나 이상의 토픽을 구독하고 해당 토픽에 저장된 스트림을 입수하고 처리할 수 있습니다. 해당 토픽의 레코드를 실시간으로 다루거나, 과거의 레코드를 입수하고 처리할 수 있습니다.
  • 스트림 API(Streams API): 생산자 API 및 소비자 API를 기반으로 복잡한 처리 기능을 추가합니다. 이 기능은 애플리케이션에서 상시 프론트-백 스트림 처리를 수행할 수 있게 합니다. 즉, 하나 이상의 토픽에서 레코드를 소비하거나, 필요에 따라 레코드를 분석, 집계, 변환하거나, 결과로 생성된 스트림을 같은 토픽이나 다른 토픽에 게시할 수 있습니다. 생산자 API와 소비자 API는 단순 스트림 처리에 사용할 수 있으나, 더 정교한 데이터/이벤트 스트리밍 애플리케이션 개발은 스트림 API에서 가능합니다.
  • 커넥터 API(Connector API): 개발자가 커넥터를 빌드할 수 있습니다. 커넥터란 재사용 가능한 생산자 또는 소비자이며, 데이터 소스를 Kafka 클러스터에 통합하는 것을 간소화하고 자동화합니다. 주요 데이터 저장소를 위한 레디메이드 커넥터(ibm.com 외부 링크)를 참조하세요.
Kafka 성능

Kafka는 분산형 플랫폼입니다. 결함 허용 고가용성 클러스터의 형태로 실행되는데, 여러 서버나 심지어 여러 데이터 센터를 포괄하기도 합니다. Kafka 토픽은 성능 저하 없이 수많은 동시 소비자를 서비스할 만큼 확장 가능한 방식으로 분할되고 복제됩니다. 그 결과, Apache.org에 따르면, “Kafka는 서버에 50KB, 또는 50TB의 영구 스토리지가 있더라도 동일한 성능을 발휘"합니다.

Kafka 유스 케이스

Kafka는 주로 2가지 종류의 애플리케이션 개발에 쓰입니다.

  • 실시간 스트리밍 데이터 파이프라인: 엔터프라이즈 시스템 간에 무수히 많은 데이터/이벤트 레코드를, 규모의 제약 없이 실시간으로 전송하도록 설계된 애플리케이션입니다. 레코드 전송은 안정적으로, 그리고 데이터 손상 및 중복을 비롯하여 방대한 데이터의 고속 이동 과정에서 흔히 발생하는 각종 문제점 없이 이루어집니다.
  • 실시간 스트리밍 애플리케이션: 레코드 또는 이벤트 스트림에 의해 구동되는 애플리케이션, 그리고 자체적으로 스트림을 생성하는 애플리케이션입니다. 온라인에서는 이러한 애플리케이션을 매일 수없이 만날 수 있습니다. 가까운 매장의 제품 재고량을 계속 업데이트하는 리테일 사이트, 클릭스트림 분석을 토대로 개인별 추천이나 광고를 보여주는 사이트 등이 이에 해당합니다.
Kafka 및 RabbitMQ 비교

RabbitMQ는 매우 널리 쓰이는 오픈 소스 메시지 브로커입니다. 메시지 브로커란 애플리케이션, 시스템, 서비스 간에 메시징 프로토콜을 변환해주면서 상호 통신을 가능하게 하는 미들웨어 유형입니다.

Kafka는 일종의 메시지 브로커로 시작했으므로 (따라서 이론상으로는 아직도 메시지 브로커의 기능을 할 수 있으므로), 또한 RabbitMQ에서 게시/구독 메시징 모델도 지원하므로, Kafka와 RabbitMQ는 상호 대안으로 자주 비교되곤 합니다. 하지만 이러한 비교가 현실적이지는 않으며, 둘 중 하나를 선택하는 것과는 거리가 있는 기술적 세부 사항에 관한 논의가 대부분입니다. 예를 들어 Kafka 토픽은 여러 개의 구독자를 가질 수 있으나, RabbitMQ 메시지 각각은 하나만 가질 수 있습니다. Kafka 토픽은 지속적이지만, RabbitMQ 메시지는 소비된 후에는 삭제됩니다.

결론:

  • Kafka는 스트림 처리 플랫폼으로서 애플리케이션에서 방대한 양의 레코드 스트림을 빠르고 안정적으로 게시, 소비, 처리할 수 있게 합니다.
  • RabbitMQ는 메시지 브로커이며, 서로 다른 메시징 프로토콜을 사용하는 애플리케이션끼리 메시지를 주고받을 수 있게 합니다.
Kafka와 함께 자주 쓰이는 Apache 기술

Kafka는 더 큰 범위의 스트림 처리인 이벤트 기반 아키텍처, 또는 빅데이터 분석 솔루션에 포함되어 다른 Apache 기술과 함께 쓰일 때가 많습니다.

Apache Spark

Apache Spark는 대규모 데이터 처리를 위한 분석 엔진입니다. Apache Kafka에서 제공하는 스트림을 대상으로 분석을 수행할 때, 그리고 앞서 언급한 클릭스트림 분석과 같이 실시간 스트림 처리 애플리케이션을 제작하기 위해 Spark를 사용할 수 있습니다.

Apache NiFi

Apache NiFi는 데이터 플로우 관리 시스템이며, 드래그 앤 드롭 방식의 비주얼 인터페이스를 갖추었습니다. NiFi는 Kafka 생산자 및 Kafka 소비자로 실행할 수 있으므로, Kafka에서 다루지 못하는 데이터 플로우 문제를 해결하는 데 효과적인 툴입니다.

Apache Flink

Apache Flink는 이벤트 스트림을 대상으로 규모의 제약 없이, 계속 빠른 속도와 짧은 대기 시간으로 컴퓨팅을 수행하기 위한 엔진입니다. Flink는 Kafka 소비자의 역할로 스트림을 주입하고, 이 스트림을 기반으로 실시간 작업을 수행하고, 그 결과를 Kafka나 다른 애플리케이션에 게시할 수 있습니다.

Apache Hadoop

Apache Hadoop은 분산형 소프트웨어 프레임워크입니다. 방대한 데이터를 컴퓨터 클러스터에 저장하여 빅데이터 분석, 머신러닝, 데이터 마이닝 등 정형 데이터와 비정형 데이터를 처리하는 각종 데이터 기반 애플리케이션에 사용할 수 있게 합니다. Kafka는 대개 Hadoop 클러스터에 실시간 스트리밍 데이터 파이프라인을 생성하는 데 쓰입니다.

관련 솔루션
애플리케이션 현대화 서비스

어떤 클라우드에서도 안전하고 확실하게 애플리케이션을 빌드, 현대화, 관리합니다.

애플리케이션 현대화 컨설팅 서비스 살펴보기
AI 기반 자동화

비즈니스 워크플로우부터 IT 운영까지 어떤 영역도 AI 기반 자동화로 지원합니다.

AI 기반 자동화 살펴보기
IBM Cloud Pak for Integration

업계에서 가장 포괄적인 통합 플랫폼으로 인정받는 IBM Cloud Pak for Integration에서 각종 애플리케이션, 서비스, 데이터를 연결할 수 있습니다.

IBM Cloud Pak for Integration 살펴보기
다음 단계

더 나은 고객 경험 및 다양한 애플리케이션이 계속 요구되면서 비즈니스 및 IT 운영도 영향을 받음에 따라 Kafka는 애플리케이션 현대화에서 계속 일익을 담당할 것입니다. 그러한 요구를 해결하는 데 있어 자동화를 확대하는 것도 해법이 됩니다. IBM과 함께 사전 구현 방식의 워크플로우를 비롯한 AI 기반 자동화 기능을 십분 활용하면서 모든 프로세스를 한층 더 지능화하여 혁신의 속도를 높일 수 있습니다. IBM Event Streams for IBM Cloud를 만나보세요. 이 완전 관리형 Kafka-as-a-Service 이벤트 스트리밍 플랫폼은 IBM Cloud에서 이벤트 기반 애플리케이션을 효과적으로 빌드하도록 지원합니다.

IBM Event Streams 자세히 보기