본문 바로가기

Programming

Kafka Streams(카프카 스트림즈) 란?

Kafka는 본래 메시지를 다른 프로세스나 애플리케이션에 전달하기 위해 사용되었지만, 카프카의 강력한 성능으로 인해 연속된 메세지인 스트림을 처리하는데도 점차 사용되기 시작했다.

 

Stream vs Batch

스트림 프로세싱은 데이터들이 지속적으로 유입되고 나가는 과정에서 데이터에 대한 분석이나 질의를 수행하는 것을 의미한다.

데이터가 프로그램에 도달하자마자 처리를 하기 때문에 스트림 프로세싱은 실시간 분석이라고 불리기도 한다.

 

기존에 대규모 데이터를 처리하기 위해 배치를 사용하는 경우가 많다.

배치 처리는 이미 저장된 데이터를 기반으로 분석이나 질의를 수행하고 특정 시간에 처리하는 특징을 가지고 있다.

 

빅데이터나 머신러닝이 붐이 일기 전, 대부분 기업에서 수행되는 데이터 분석은 배치 처리 형태였다.

하지만 점차 기술이 발달하면서 오늘날 데이터 분석 시스템은 스트림 처리 시스템과 배치 처리 시스템을 모두 갖추어 실시간성과 정확성을 모두 높이는 형태로 발전되었다.

 

Stream 프로세싱

  • 애플리케이션이 이벤트에 즉각적으로 반응한다.
  • 데이터를 저장한 후에 분석(= 프로세싱)하지 않으므로 정적 분석 (= 데이터를 저장하고 분석)보다 더 많은 데이터를 분석할 수 있다.
  • 스트림 프로세싱은 지속적으로 유입되는 데이터 분석에 최적화 되어 있다.
  • 대규모 공유 데이터베이스에 대한 요구를 줄일 수 있다.

Stream 상태기반? 무상태 스트림 처리?

스트림 처리를 하다 보면 이전 스트림을 처리한 결과를 참조해야 하는 경우가 생길 수 있다.

이런 경우의 처리 방식을 상태 기반 처리라고 한다.

 

이러한 상태 기반 처리를 하기 위해서는 각각의 이벤트를 처리하고 그 결과를 저장할 상태 저장소가 필요하다.

이와 반대로 무상태 스트림처리는 이전 스트림의 처리 결과와 관계없이 현재 애플리케이션에 도달한 스트림만을 처리하는 것을 말한다.

 

Kafka Streams (카프카 스트림즈)

위에서 스트림 프로세싱의 기초 개념을 알아본 것이고, 이러한 스트림 처리를 위해 만들어진 카프카를 이용하는 카프카 스트림즈에 대해 알아보자.

카프카 스트림즈는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 클라이언트 라이브러리이다.

 

특징은 다음과 같다.

  • 간단하고 가벼운 클라이언트 라이브러리이기 때문에 기존 자바 애플리케이션에서 쉽게 사용할 수 있다.
  • 시스템이나 카프카에 대한 의존성이 없다.
  • 이중화된 로컬 상태 저장소를 지원한다.
  • 카프카 브로커나 클라이언트에 장애가 생기더라도 스트림에 대해선 1번만 처리되는 것을 보장한다.

카프카 스트림즈는 스트림 처리를 하는 프로세스들이 서로 연결되어 있다.

즉, 토폴로지를 만들어서 처리하는 API이다.

 

Kafka Streams vs Consumer

그럼 그냥 메시지 읽어서 처리하는 Consumer와는 어떤 점이 차이가 있는걸까?

 

위에서 계속 언급했듯이 Kafka Streams는 연속된 메세지를 처리한다.

Consumer가 메시지를 받아 단순히 처리하고 끝낸다면, 카프카 스트림즈는 메시지를 받아 연속된 처리를 위한 파이프라인을 구성할 수 있다.

예를 들어 다음과 같은 작업을 할 수 있는 것이다.

- 메시지의 민감 데이터 마스킹

- 1분 간격으로 메시지 특정 이벤트 감지

 

 

 

 

 

> 참조 : 카프카, 데이터 플랫폼의 최강자