Post

Apache Kafka 개요

Apache Kafka

1. 개요

Apache Kafka는 이벤트 스트리밍을 처리하는 플랫폼이다. 이벤트 스트리밍을 처리하기 위해 분산될수 있고, 저장하는 곳으로도 사용이 가능하다.

원래는 Linked-in에서 만들었고 그 회사내에서 사용하려고 했지만 오픈소스화 되면서 많은 곳에서 사용중에 있다.

2. 용도

1) 메시징

카프카는 메시지 브로커로 사용하기에 좋다. 메시지 브로커는 다양한 이유로 사용된다. 가령 데이터 생산 객체로부터 처리를 떼내서 별도로 처리하고 싶다거나 메세지 자체를 버퍼링하는 등, 여러가지로 사용될수 있어서 쓰는 것이다. 카프카는 이러한 처리를 하기에 매우 적합하다.

높은 처리량과 분산 처리 역시 가능하고, 복제세트를 통해 가용성과 내결함성을 갖고 있기 때문에 굉장히 쓰기에 좋다. 이런 부분에서 카프카는 ActiveMQ 나 RabbitMQ 와 같은 기존 메시징 시스템과 비교할 수 있다.

2) 웹사이트 활동 추적

Kafka의 초기 사용 사례는 사용자 활동 추적(user activity tracking) 파이프라인을 실시간(pub-sub) 피드로 구축하는 것이었다. 즉, 사이트에서 발생하는 활동(페이지 조회, 검색, 기타 사용자 행동 등)이 중앙 토픽(topic)에 게시되며, 각 활동 유형별로 하나의 토픽이 생성된다. 이러한 피드는 실시간 처리, 실시간 모니터링, Hadoop 또는 오프라인 데이터 웨어하우스 시스템으로 로딩하여 오프라인 분석 및 보고 용도로 활용될 수 있다. 활동 추적은 일반적으로 매우 높은 데이터 볼륨을 가지는데, 이는 사용자가 페이지를 조회할 때마다 여러 개의 활동 메시지가 생성되기 때문이다.

3) 지표 추적

Kafka는 운영 모니터링 데이터를 처리하는 데 자주 사용된다. 분산 애플리케이션에서 생성된 통계 데이터를 중앙 집중형 운영 데이터 피드로 집계하는 방식이다.

4)로그 집계

Kafka는 로그 집계 솔루션의 대체제로도 활용됩니다. 기존 로그 집계 시스템에서는 서버의 물리적 로그 파일을 수집하여 파일 서버나 HDFS와 같은 중앙 저장소에 보관한 후 처리한다. Kafka는 파일 기반 접근 방식을 추상화하여, 로그 또는 이벤트 데이터를 메시지 스트림 형태로 제공한다. 이를 통해 더 낮은 지연 시간으로 데이터를 처리할 수 있으며, 여러 데이터 소스를 보다 쉽게 지원하고 분산 데이터 소비(distributed data consumption)를 가능하게 한다. Scribe나 Flume과 같은 로그 중심 시스템과 비교했을 때, Kafka는 동등한 성능을 제공하면서도 복제(replication)를 통한 더 강력한 내구성을 보장하며, 훨씬 낮은 엔드-투-엔드 지연 시간을 제공한다.

5) 스트림 처리

Kafka는 여러 단계를 거치는 데이터 처리 파이프라인에서 널리 사용됩니다. 원본 데이터는 Kafka 토픽에서 소비되며, 집계(aggregation), 보강(enrichment), 변환(transformation) 과정을 거쳐 새로운 토픽에 게시됩니다. 이후 추가적인 소비 또는 후속 처리가 이루어질 수 있다. 가령 뉴스기사를 추천하는 파이프라인을 만든다고 해볼때, 아래와 같은 절차를 거치게된다.

  1. RSS 피드에서 뉴스 기사를 크롤링하여 “articles” 토픽에 게시
  2. 콘텐츠를 정규화(normalization) 또는 중복 제거(deduplication)한 후 정제된 기사 내용을 새로운 토픽에 게시
  3. 마지막으로 사용자에게 추천할 기사를 선택하는 단계 수행

Kafka 0.10.0.0 버전부터는 이러한 데이터 처리를 수행할 수 있도록 가볍지만 강력한 스트림 처리 라이브러리인 Kafka Streams가 Apache Kafka 내에서 제공된다. 물론 Kafka Streams 외에도 Apache Storm, Apache Samza와 같은 오픈 소스 스트림 처리 도구들이 대안으로 존재한다.

6)이벤트 소싱

이벤트 소싱은 애플리케이션 설계 스타일 중 하나로, 상태 변경을 시간순으로 정렬된 기록(sequence of records)으로 저장하는 방식이다. Kafka는 대량의 로그 데이터를 저장할 수 있는 강력한 기능을 제공하므로, 이러한 스타일의 애플리케이션을 위한 뛰어난 백엔드 역할을 수행할 수 있다.

7) 커밋 로그

Kafka는 분산 시스템에서 외부 커밋 로그(commit log) 역할을 수행할 수도 있다. 로그를 활용하여 노드 간 데이터 복제를 수행하고, 장애가 발생한 노드가 데이터를 복구하는 재동기화(resyncing) 메커니즘을 제공한다. Kafka의 로그 압축(log compaction) 기능은 이러한 사용 사례를 지원하는 데 유용하며, 이 측면에서 Kafka는 Apache BookKeeper 프로젝트와 유사한 기능을 한다

※ 추가 업데이트 및 검증 예정

참고자료

This post is licensed under CC BY 4.0 by the author.