Skip to main content

[Kafka] Chapter01. 카프카란 무엇인가.

· 7 min read
Jeonghun Kong

개요

이번 장에서 카프카란 무엇인가, 동작 방식과 특징에 대해 알아볼 것이다.

배경

카프카는 Linkedin에서 처음 출발한 기술로, 사이트의 급속헌 발전으로 인해 발생하는 여러 내부 이슈를 해결하기 위해 개발된 플랫폼이다. 서비스의 확장에 따라 그 구조도 따라 변화해야 하지만, 언젠가 그 변화의 한계가 올 것이고, 그 한계를 극복해야 더욱 견고하고, 안정적인 서비스를 운영 할 수 있다. 카프카는 확장성과 고 가용성, 정확성을 고려한 데이터 플랫폼으로 서비스를 구성하고있는 요소와 느슨한 결합을 유지한 채 확정성을 보장한다. 이런 카프카의 동작 원리와 특징을 이번 장에서 학습하고자 한다.

동작 방식과 원리

카프카는 기본적으로 메시징 서버로 동작한다. 메세지를 발생하는 측(Producer, Publisher)과 그 메세지를 사용하는 측(Consumer, Subscriber), 그리고 이 메세지를 구분할 수 있는 토픽으로 해당 정보를 교환하는 통신 구조를 Pub/Sub 구조라 한다. 이런 통신 구조는 중앙에 교환기가 필요한데, 카프카는 그 역할을 하는 서버이다. 여기서 카프카는 일반적인 Pub/Sub 구조와는 달리, 메세지 교환 전달의 신뢰성 관리를 프로듀서와 컨슈머로 넘기고, 부하가 많이 걸리는 교환기의 기능을 컨슈머가 만들 수 있게 해서 메세지 전달에 성능을 집중시킨 고성능 메시징 시스템을 만들었다.

동작 흐름

동작의 흐름은 다음과 같다.

  1. 프로듀서는 카프카로 메세지를 보낸다.
  2. 프로듀서가 보낸 메세지는 카프카에 컨슈머 큐에 저장된다.
  3. 컨슈머는 카프카 서버에 접속해 새로운 메세지를 가져간다.

카프카는 기존의 메시징 서비스와 동일하게 비동기 시스템이다. 프로듀서는 컨슈머와 별도의 관계를 맺지 않고 메세지를 전송할 수 있으며, 컨슈머는 프로듀서와 관계 없이 자신이 관심있는 메세지를 읽어올 수 있다.

멀티 프로듀서, 멀티 컨슈머

카프카 내에서 메세지는 토픽이라는 단위로 구분된다. 컨슈머는 이 토픽으로 자신의 메세지를 구별해 가져올 수 있고, 프로듀서는 토픽에 메세지를 보내놓으면 된다. 이 토픽은 일대일 구조 뿐만 아니라 다대다 구조로 사용할 수 있다. 하나의 토픽에 여러 프로듀서가 메세지를 보낼 수 있고, 여러 토픽을 하나의 컨슈머가 구독할 수 있다. 이 덕분에 카프카는 중앙 집중형 구조로 구성할 수 있다.

디스크에 메세지 저장

카프카가 다른 메세징 시스템과 구분되는 가장 큰 특징은 디스크에 메세지가 저장된다는 것이다. 다른 메세징 시스템은 컨슈머가 메세지를 가져가는 동시에 해당 메세지를 큐에서 지우지만, 카프카는 컨슈머가 메세지를 가져가도 지우지 않고 디스크에 남겨둔다. 이 덕분에 트래픽의 일시적 폭주로 인해 처리가 늦어지더라도 컨슈머는 메세지 손실 없이 가져갈 수 있으며, 오류발생으로 컨슈머를 잠시 중단하더라도, 메세지는 남아있으므로 복구시에 데이터의 유실 없이 장애로부터 복구할 수 있다.

확장성

카프카는 확장이 매우 용이하도록 설계되어있다. 1개의 카프카 클러스터는 기본 3개의 브로커로 시작해 수십개의 브로커로 확장 할 수 있으며 이 확장 작업은 서비스의 중단 없이 이뤄질 수 있다. 최초 서비스 시작시 적은 수의 클러스터로 구성하고, 이후의 필요에 의해 부담없이 클러스터의 수를 확장할 수 있다.

높은 성능

카프카는 매우 높은 성능을 목표로 탄생한 Application이다. 고성능을 유지하기 위해 내부적으로 분산처리, 배치 등 다양한 기법을 사용하고 있다.

마무리

이번 장에서 카프카의 배경과 동작 방식, 그리고 동작 원리에 대해 학습했다. 실무에서 한번씩은 경험해볼법한 메세지 서비스를 고가용성과 확장성을 고려한 Application으로 만든 카프카를 통해 구성해보면 어떨지 생각해 볼 수 있었다.

다음 챕터는 카프카가 어떻게 디자인 되어있는지를 학습할 것이다.