카프카(Kafka) 란?

Kafka는 고성능 데이터 파이프라인, 스트리밍 분석 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 오픈 소스 분산 이벤트 스트리밍 플랫폼이다.

이벤트 스트리밍은 인체의 중추 신경계에 해당하는 디지털 처리 방식이다.
는 비즈니스가 점점 더 소프트웨어화, 자동화되는 'always-on' 세상을 위한 기술 기반이다.
대용량, 대규모 메시지 데이터를 빠르게 처리할 수 있는 메시징 시스템이다.
Kafka의 이벤트 스트리밍은 Fortune 100대 기업의 60% 이상을 포함하여 수많은 산업 및 조직의 다양한 사용 사례 에 적용된다.

카프카(Kafka) 히스토리

MSA는 Micro Service Architecture 의 줄임말으로, 말 뜻에서 직관적으로 알수있듯이, 기존의 서비스들을 잘게 쪼개서 서비스를 운영하는 기법이다.
자세한 사항은 마이크로 서비스 아키텍처(MSA)에서 확인
그런데 서비스를 잘게 쪼개면 다양한 이슈들이 발생한다. 대표적으로는 아래의 이슈들이 있다.

  • 서비스를 잘게 쪼개면서 서버 간에 상호작용이 많아진다. 이는 큰 오버헤드를 불러온다.
  • 서비스를 잘게 쪼갬과 동시에 데이터 파이프라인의 복잡도가 증가한다. 이는 해당 기업에 커다란 기술부채 (Technical Debt) 를 불러왔으며, 이러한 기술부채는 유지보수 및 운영에 커다란 악영향을 끼친다.

서비스의 규모가 거대해짐에 따라서 위의 그림과 같이 데이터 파이프라인 의 양상이 매우 복잡해지는 것을 확인할 수 있다.

이를 해결하기 위해서 링크드인의 데이터팀에서는 어떻게든 데이터 파이프라인의 파편화 현상을 개선하려고 하였으나, 기존의 메시징 플랫폼 등으로는 도저히 개선이 되지 않았다.

결국에 링크드인 데이터팀은 기존의 메시징 플랫폼을 이용하여 데이터 파이프라인의 파편화 현상을 개선하는 것이 아닌, 차라리 새로운 시스템을 개발하여 해결을 시도했다. 이 과정에서 나오게된 결과물이 아파치 카프카(Apache kafka) 이다.

이벤트 스트리밍 플랫폼이란?

Kafka는 세 가지 주요 기능을 결합하여 end-to-end 이벤트 스트리밍을 구현할 수 있다.

  • 이벤트 스트림을 지속적으로 발행(publish-write), 구독(subscribe-read) 한다.
  • 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장(store) 한다 . KafkaCluster(broker)
  • 이벤트 스트림 을 발생 시 또는 소급하여 처리(Process) 한다.

그리고 이 모든 기능은 분산되고, 확장성이 뛰어나고 탄력적이며 내결함성이 있으며 안전한 방식으로 제공된다. 카프카는 베이메탈 하드웨어 가상 머신, 컨테이너, 온프레미스 및 클라우드에 배포할 수 있다. Kafka 환경을 자가 관리하거나 다양한 공급업체에서 제공하는 완전 관리형 서비스를 사용할 수 있다.

주요 개념 및 용어

기본 구조

  • 카프카 클러스터(KafkaCluster) : 카프카의 브로커들의 모임. Kafka는 확장성과 고가용성을 위하여 broker들이 클러스터로 구성
  • 브로커(Broker) : 각각의 카프카 서버, 동일 노드에 여러 브로커를 띄울 수 있다.
  • 주키퍼 (Zookeeper) : 카프카 클러스터 정보 및 분산처리 관리 등 메타데이터 저장. 카프카를 띄우기 위해 반드시 실행되어야 함(곧 카프카 클러스터와 통합 예정)
  • 프로듀서(Producer) : 메시지(이벤트)를 발행하여 생산(Wirte) 하는 주체
  • 컨슈머(Consumer) : 메시지(이벤트)를 구독하여 소비(Read) 하는 주체

토픽과 파티션

  • 토픽은 메시지를 구분하는 단위: 파일시스템의 폴더와 유사
  • 한 개의 토픽은 한 개 이상의 파티션으로 구성
    - 파티션은 메시지를 저장하는 물리적인 파일
  • 각각의 메시지를 알맞게 구분하기 위한 목적으로 사용
  • 프로듀서와 컨슈머가 토픽을 기준으로 메시지를 주고 받음

구동 과정

파티션과 오프셋, 메시지 순서

  • 파티션은 추가만 가능한(append-only) 파일
    - 각 메시지 저장 위치를 오프셋(offset)이라고 함
    - 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가
    - 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽음
    - 메시지는 삭제되지 않음(설정에 따라 일정시간이 지난 뒤 삭제)

여러 파티션과 프로듀서

  • 프로듀서는 라운드로빈 또는 키로 파티션 선택
    같은 키를 갖는 메시지는 같은 파티션에 저장 -> 같은 키는 순서 유지

여러 파티션과 컨슈머

  • 컨슈머는 컨슈머그룹에 속함
  • 한 개 파티션은 컨슈머그룹의 한 개 컨슈머만 연결 가능
    - 즉 컨슈머그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없음
    - 한 컨슈머그룹 기준으로 파티션의 메시지는 순서대로 처리
    - 한 개 파티션을 서로 다른 그룹의 컨슈머는 공유할 수 있음

사용 이유

히스토리와 아래 그림으로 명확히 이해할 수 있다.

카프카가 개발되기 전 링크드인의 데이터 처리 시스템

카프카를 이용한 링크드인의 데이터 처리 시스템

References (참고 자료)

0개의 댓글