Skip to main content

1. 들어가며

1.1 카프카의 탄생#

  • 데이터 전송하는 라인이 기하급수적으로 복잡해져서 이를 해결할 필요를 느꼈스빈다.
  • 데이터 스트림을 한 곳에서 실시간으로 관리하고, 이를 실시간 스트림으로 소비할 수 있게 만들었습니다.

1.2 빅데이터 파이프라인에서 카프카의 역할#

  • 데이터 레이크 : 데이터가 모이는 저장 공간을 의미합니다.
    • 데이터 웨어하우스와 다르게 필터링되거나 패키지화되지 않은 데이터가 저장됩니다.
    • 데이터를 엔드 투 엔드로 모으면 파편화되고 복잡도가 올라가는 문제점이 발생합니다. 이를 해결하기 위해 데이터를 추출하고 변경, 적재하는 과정을묶은 데이터 파이프라인을 구축해야 합니다.
  • 엔드 투 엔드 방식의 데이터 수집 및 적재를 개선하고 안정성을 추구하며, 유연하면서도 확장 가능하게 자동화한 것을 '데이터 파이프라인'이라고 부릅니다.

아파치 카드카가 왜 데이터 파이프라인으로 적합한지는 아래의 장점이 있습니다.

높은 처리량#

  • 카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송합니다.
  • 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고 데이터를 병렬 처리할 수 있습니다.
  • 파티션 개수만큼 컨슈머 개수를 늘려서 동일 시간당 데이터 처리량을 늘리는 것입니다.

확장성#

  • 데이터가 적을 때는 카프카 클러스터의 브로커를 최소한의 개수로 운영하다가 데이터가 많아지면 클러스터의 브로커 개수를 자연스럽게 늘려 스케일 아웃(scale-out)할 수 있습니다.

영속성#

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않은 데이터의 특성을 뜻합니다.
  • 카프카는 다른 메시징 플랫폼과 다르게 전송받은 데이터를 메모리에 저장하지 않고 파일 시스템에 저장합니다.
  • 페이지 캐시 메모리 영역을 사용하여 한번 읽은 파일 내용은 메모리에 저장시켰다가 다시 사용하는 방식이기 때문에 카프카가 파일 시스템에 저장하고 데이터를 저장, 전송하더라도 처리량이 높은 것입니다.
  • 디스크 기반의 파일 시스템을 활용한 덕분에 브로커 애플리케이션이 장애 발생으로 인해 급작스럽게 종료되더라도 프로세스를 재시작하여 안전하게 데이터를 다시 처리할 수 있습니다.

고가용성#

  • 3개 이상의 서버들로 운영되는 카프카 클러스터는 일부 서버에 장애가 발생하더라도 무중단으로 안전하고 지속적으로 데이터를 처리할 수 있습니다.
  • 클러스터로 이루어진 카프카는 데이터의 복제를 통해 고가용성의 특징을 가지게 되었습니다.

카프카 생태계 모식도


1.3 데이터 레이크와 카프카의 미래#

  • 데이터 레이크 아키텍처의 종류는 2가지 입니다.
    • 람다 아키텍처(lambda architecture)
    • 카파 아키텍처(kappa architecture)

람다 아키텍처

  • 람다 아키텍처는 3가지 레이어로 나눕니다.
    • 배치 레이어는 배치 데이터를 모아서 특정 시간, 타이밍마다 일괄 처리합니다.
    • 서빙 레이어는 가공된 데이터를 데이터 사용자, 서비스 애플리케이션이 사용할 수 있도록 데이터가 저장된 공간입니다.
    • 스피드 레이어는 서비스에서 생성되는 원천 데이터를 실시간으로 분석하는 용도로 사용합니다.
    • 람다 아키텍처에서는 카프카는 스피드 레이어에 위치합니다.
  • 람다 아키텍처는 장단점
    • 장점 : 데이터 처리 방식을 명확히 나눌 수 있습니다.
    • 단점
      • 데이터를 분석, 처리하는 데 필요한 로직이 2벌로 각각의 레이어에 따로 존재해야 한다는 점
      • 배치 데이터와 실시간 데이터를 융합하여 처리할 때는 다소 유연하지 못한 파이프라인을 생성해야 한다는 점

카파 아키텍처

  • 람다 아키텍처에서 단점으로 부각되었던 로직의 파편화, 디버깅, 배포, 운영 분리에 대한 이슈를 제거하기 위해 배치 레이어를 제거한 카파 아키텍처는 스피드 레이어에서 데이터를 모두 처리할 수 있었으므로 엔지니어들은 더욱 효울적으로 개발과 운영에 임할 수 있게 됩니다.
  • 카파 아키텍처는 스피드 레이어에서 모든 데이터를 처리하므로 서비스에서 생성되는 모든 종류의 데이터를 스트림 처리해야합니다.

이러한 로직을 적용하려면 다른 로그 데이터가 필요 합니다.

  • 로그는 일정한 번호(혹은 타임스탬프)가 붙으며, 배치 데이터를 스트림으로 표현하기 적합합니다.

다음의 세대, '스트리밍 데이터 레이그 아키텍처'의 경우 스피드 레이어만 참조함으로 데이터의 중복, 비정합성과 같은 문제에서 벗어날 수 있습니다.


1.4 정리#

  • 카프카는 큰 데이터가 아닌 곳이라 다른 곳에서도 유용하게 사용할 수 있습니다.
Last updated on