권찡's 공학이야기

Kafka 의 기본 개념 이해 본문

IT & Cloud/Kafka

Kafka 의 기본 개념 이해

권찡 2020. 2. 10. 17:32

앞선 정리에서 간단히 카프카에 대한 소개를 했습니다. 

 

분산형 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션입니다.

 

특히나 대용량 로그 처리에 특화되어 있는 솔루션입니다.

 

과거 카프카가 개발되기 전 링크드인의 데이터 처리 시스템은 아래 보시는 것과 같았습니다.

출처 : https://www.confluent.io/blog/event-streaming-platform-1/

위와 같이 데이터를 이리보냈다가 저리보냈다가 하는 것으로 매우 복잡한 구조를 가집니다.

위 구조의 문제는 각 파이프라인 별로 데이터 포맷과 처리하는 방법이 완전히 달라서 확장과 운영에 매우 어려움이 있습니다.

 

위와 같은 구조에 카프카를 적용한 이후의 데이터 처리 시스템을 보면 구조가 매우 일목요연하게 보입니다.

출처 : https://www.confluent.io/blog/event-streaming-platform-1/

이는 발생하는 모든 이벤트/데이터의 흐름을 중앙에서 관리하는 카프카를 적용한 것입니다. 이런 카프카를 도입함으로 가지는 이점은 뭐가 있을까요?

 

데이터 및 이벤트가 필요한 모든 플랫폼에 동일한 포켓으로 연결되어 데이터를 주고 받는데 부담이 없어졌습니다.

 

그렇다면 동작방식과 원리를 정리해보겠습니다.

 

앞서 데이터 단위를 보내는 측(Publisher/ Producer),  가져가는 측(Subscriber/ Consumer)가 있습니다. 중간에는 메시징 시스템 서버를 두고 구독형태의 Pub/Sub 모델을 가진다 했습니다.

 

중간에 메시징 서버를 두고 독립적으로 데이터를 생산하고 소비하기 때문에 느슨한 결합을 가질 수 있습니다.

 

다만 이런 중간에 메시징 시스템을 두는 형태의 단점은 직접 통신을 하지 않기 때문에 정확히 전달되었는지 확인하려면 코드가 좀더 복잡해지고, 중간에 메시징 시스템이 있기 때문에 메시지 전달 속도가 빠르지 않다는 점이 있습니다.

 

카프카는 이런 단점을 극복하기 위해 메시지 교환 신뢰성 관리를 프로듀서와 컨슈머쪽으로 넘기고, 부하가 많이 걸리는 교환기 기능 역시 컨슈머가 만들수 있게 하여 고성능 메시징 시스템을 만들었습니다.

 

 

 

그렇다면 다른 메시징 시스템(ActiveMQ, rabbitMQ)과는 무엇이 다른가?

중간의 메시징 시스템이 있는 곳을 브로커라 한다면, 기존 메시징 시스템은 브로커가 컨슈머에게 메세지를 push하는 방식이나, 카프카는 컨슈머가 pull 하는 방식입니다. 

 

이는 컨슈머가 자신의 처리 능력만큼의 메시지만 가져와서 최적의 성능을 낼수 있는 것입니다. 대용량처리에 특화되었다는 것은 이런 구조 때문이지 않을까 싶네요.

 

 

 

앞서 구독과 같은 형태로 메시지를 전달한다고 말했습니다.

만약 멀티 프로듀서나 멀티 컨슈머가 있다면 카프카는 어떤 구조를 가져야하는지 궁금합니다.

 

카프카는 하나의 토픽에 여러 프로듀서나 컨슈머가 접근 가능하게 되어있습니다.

 

유투브를 예로 들면 유투브가 카프카라고 합시다.

유투버 A씨는 자신의 채널에 영상을 업로드합니다. 그렇다면 구독되어있는 구독자는 유투버A씨의 영상을 볼수가 있겠죠.

 

 유투버A는 프로듀서가 될 것이고, 영상을 보는 구독자는 컨슈머가 되겠네요. 여러 유투버의 채널(토픽)을 구독하면 컨슈머는여러 영상에 대해 알람을 받고, 영상을 볼수 있을 것입니다.

 

여기서 좀더 확장해서

 

프로듀서는 하나 이상의 토픽에 메세지를 push하는 것이 가능하고, 컨슈머는 해당 토픽에 대해서 메세지를 가져올 수 있습니다.

 

 

이런 카프카가 가지는 몇가지 특징을 정리해보면 

 

 - 디스크에 메세지 저장

기존 메시징 시스템과 달리 디스크에 메세지를 저장하고 유지합니다. 일반적인 메시징 시스템은 컨슈머가 메시지를 읽어 가면 삭제하나, 카프카는 정해진 보관 주기 동안 디스크에 메시지를 순차적으로 저장합니다. 이로서 얻는 이점은

  1. 서버가 장애가 나도 메시지가 디스크에 저장되있어 유실 걱정이 없다.

  2. 디스크가 순차적으로 저장되어 있어 디스크 I/O가 줄어들어 성능이 빨라진다.

 

 - 확장성

카프카는 클러스터로 작동하기 때문에, 고가용성이 제공되며, 분산 처리를 통해 빠른 데이터 처리를 가능하게 합니다. 또한 수평적으로 확장(scale-out : 서버 수를 늘리는 것)이 매우 용이하게 설계되어 있어 트래픽 및 사용량 증가로 인한 장애를 방지할 수 있습니다.

 

 - 높은 성능

카프카가 높은 성능을 목표로 탄생한 애플리케이션이라 그런지 내부적으로 분산 처리, 배치 처리등 다양한 기법을 사용하고 있어 메세지를 상황에 맞추어 빠르게 처리할 수 있습니다.

 

 

 

 

다음장에서는 이번에 설명하지 않은 내용(토픽, 파티션, 주키퍼 등등)과 더불어 카프카를 직접 설치해보겠습니다.

'IT & Cloud > Kafka' 카테고리의 다른 글

Kafka ?  (0) 2020.02.06