본문 바로가기

카프카 핵심 가이드

[카프카 핵심 가이드] 왜 카프카인가?

1) 카프카의 장점

 

(1) 다중 프로듀서

 

- 카프카는 자연스럽게 여러 프로듀서를 처리할 수 있다.

  프로듀서 클라이언트가 여러 토픽을 사용하든 하나의 토픽을 사용하든 간에 말이다.

  이러한 이유 때문에 많은 프론트엔드 시스템으로부터 

  데이터를 수집하고 일관성을 유지하는데 적격이다. 

 

 

(2) 다중 컨슈머

- 다중 프로듀서와 함께, 카프카는 많은 컨슈머가 상호 간섭 없이 

  어떠한 메시지 스트림도 읽을 수 있도록 설계되었다.

  이것이 하나의 메시지를 하나의 클라이언트에서만 소비할 수 있도록 되어 있는 

  많은 큐(queue) 시스템과의 결정적인 차이점이기도 하다. 

 

- 다수의 카프카 컨슈머는 컨슈머 그룹의 일원으로 작동함으로써

  하나의 스트림을 여럿이서 나눠서 읽을 수 있다.

  이 경우 주어진 메시지는 전체 컨슈머 그룹에 대해 한 번만 처리된다. 

 

 

(3) 디스크 기반 보존

- 카프카는 다중 컨슈머를 처리할 수 있을 뿐만 아니라

  메시지를 지속성 있게 저장할 수도 있다.

  이는 컨슈머들이 항상 실시간으로 데이터를 읽어올 필요는 없다는 의미이기도 하다. 

 

- 메시지는 디스크에 쓰여진 뒤 설정된 보유 규칙과 함께 저장된다.

  이 옵션들은 토픽별로 설정이 가능하기 때문에

  서로 다른 메시지 스트림이 컨슈머의 필요에 따라 서로 다른 기간 동안 보존될 수 있다. 

 

- 따라서 만약 컨슈머가 느린 처리 속도 혹은 트래픽 폭주로 인해 뒤처질 경우에도

  데이터 유실의 위험은 없다.

  

- 프로듀서 쪽에서 메시지를 백업해야 하거나 메시지가 유실될 걱정 없이

  잠시 애플리케이션을 내리고 컨슈머를 유지보수할 수 있는 것이다.

 

- 컨슈머를 정지하더라도 메시지는 카프카 안에 남아있게 된다.

  그리고 컨슈머가 다시 시작되면 작업을 멈춘 짖머에서부터 유실 없이 데이터를 처리할 수 있다. 

 

 

(4) 확장성

-  카프카는 유연한 확장성을 가지고 있기 때문에 어떠한 크기의 데이터도 쉽게 처리할 수 있다.

   처음에는 실제로 잘 돌아가는지를 검증하는 의미에서 하나의 브로커로 시작한 뒤,

   3개의 브로커를 가진 소규모의 개발용 클러스터, 

   마지막에는 데이터 증가에 따라 수십 개에서 수백 개의 브로커로 구성된 대규모 클러스터로 이루어진

   프로덕션 환경으로 옮겨가면 된다. 

 

- 카프카 클러스터는 작동 중에도 시스템 전체의 가용성(availability)에 영향을 주지 않으면서

  확장이 가능하다.

  여러 대의 브로커로 구성된 클러스터는 개별 브로커의 장애를 처리하면서

  지속적으로 클라이언트의 요청을 받아서 처리할 수 있다는 의미다.

 

 

(5) 고성능

-  아파치 카프카가 고부하 아래에서도 높은 성능을 보여주는 발행/구독 메시지 전달 시스템이 될 수 있었던 것은

   지금까지 설명한 모든 특징들 덕분이다.

   발행된 메시지가 컨슈머에게 전달될 때까지 1초도 안 걸리면서도

   프로듀서, 컨슈머, 브로커 모두가 매우 큰 메시지 스트림을 쉽게 다룰 수 있도록 

   수평적으로 확장될 수 있는 것이다. 

 

 

(6) 플랫폼 기능

- 아파치 카프카의 코어 프로젝트에는 개발자들이 자주 하는 작업을 훨씬 쉽게 수행할 수 있도록 하는

  플랫폼 기능이 추가되어 있다.

  YARN처럼 구조화된 런타임 환경을 포함하는 완전한 플랫폼은 아니지만,

  이 기능들은 탄탄한 기반과 자유로운 형태로 실행할 수 있는 유연성을 갖춘 API와

  라이브러리의 형태로 사용이 가능하다.

 

- 카프카 커넥트는 소스 데이터 시스템으로부터 카프카로 데이터를 가져오거나

  카프카의 데이터를 싱크 시스템으로 내보내는 작업을 도와준다. 

 

- 카프카 스트림즈는 규모 가변성(scalability)과 내고장성(fault tolerance)을 갖춘

  스트림 처리 애플리케이션을 쉽게 개발할 수 있게 해주는 라이브러리다.