카프카, 데이터 플랫폼의 최강자 - 카프카란 무엇인가?
by Gunju Ko
이 글은 “카프카, 데이터 플랫폼의 최강자” 책 내용을 정리한 글입니다.
만약 저작권 관련 문제가 있다면 “gunjuko92@gmail.com”로 메일을 보내주시면, 바로 삭제하도록 하겠습니다.
카프카, 데이터 플랫폼의 최강자 - 1장 카프카란 무엇인가?
이 글은 “카프카, 데이터 플랫폼의 최강자”라는 책을 읽고 그 내용을 정리한 글입니다.
들어가며
IT 트렌드를 뒤흔드는 엄청난 단어들이 지속적으로 등작하고 있음. 하지만 이와 같은 개별 용어에 집착하기보다는 이 용어들을 이루는 기술적인 방향과 의미에 집중해야 함. 가장 큰 특징은 아래와 같음
- 느슨한 결합 (Loosely Coupled) : 클라우드 시대가 본격적으로 열리면서 컴퓨텅 리소스는 더이상 영속적이지 않음. 그렇기 때문에 각 컴포넌트들은 견고한 결합으로 연결될 수 없음. 결과적으로 근래의 컴퓨팅 통신은 직접 통신 대신 비동기 메시징 프레임워크를 기반으로 간접적으로 데이터를 주고 받는 형태를 취함
- 데이터 중앙화 : 이전 세대에서는 회사 전체의 데이터가 파편화되어 총합적인 데이터 분석이 어려웠음.
- 과거에는 많은 서비스에서 생성되는 모든 이벤트의 부하를 견딜만한 버스 시스템이 없었음
- 카프카는 강력한 메시지 처리 성능, 수평확장성, 고장감내성에 기반한 이벤트 버스 애플리케이션이기도 한 카프카의 도입으로 만족할만한 수준의 분석 기술이 가능해짐
- 카프카를 전격 도입해 중앙 데이터 파이프라인으로 사용하는 회사들이 늘어남
- 아파치 카프카는 비동기 통식 방식을 매우 큰 규모로, 아주 빠르게 처리할 수 있는 애플리케이션이다.
카프카란 무엇인가?
대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 메시징 플랫폼인 카프카는 링크드인에서 출발해 2011년 초 아파치 공식 오픈소스로 공개되었다.
- 아파치 카프카는 빅데이터를 분석할 때 여러 스토리지와 분석 시스템에 데이터를 연결하기 위한 필수 도구로 인식되었다.
1. 카프카 탄생 배경
- 기존 링크드인 시스템의 가진 문제점 : 하나의 서비스가 너무 많은 시스템과 연결된다. 그로 인해 유지 관리 부담은 더욱 더 늘어나게 되었고, 이로 인해 기능 개발 자체가 지연되었다.
- 엔드투엔드 연결 방식의 아키텍처는 많은 문제점이 있다.
- 첫째 : 실시간 트랜잭션 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없으니 복잡도가 증가할 수밖에 없다.
- 둘째 : 데이터 파이프라인 관리의 어려움이 있다. 통합 데이터 분석을 위해 서로 다른 데이터 시스템을 연결해야할 경우가 있는데, 데이터의 포맷이나 처리하는 방법이 다르다면 통합하기가 어렵다. 또한 복잡성으로 인해 두 시스템 간의 데이터가 서로 달라져 데이터의 신뢰도마저 낮아질 수 있다.
위 문제를 해결하기 위해 아래와 같은 목표로 새로운 시스템을 만들기로 함
- 프로듀서와 컨슈머의 분리
- 메시징 시스템과 같이 영구 메시지 데이터를 여러 컨슈머에게 허용
- 높은 처리량을 위한 메시지 최적화
- 데이터가 증가함에 따라 스케일아웃이 가능한 시스템
카프카를 메시지 전달의 중앙 플랫폼으로 두고 기업에서 필요한 모든 데이터 시스템(오라클, NOSQL, 하둡)뿐만 아니라 마이크로 서비스, 사스 서비스 등과 연결된 파이프라인을 만드는 것을 목표로 두고 개발되었다.
링크드인에서 카프카를 적용한 이후의 데이터 처리 시스템의 특징
- 사내 서비스에서 발생하는 모든 이벤트/데이터의 흐름을 중앙에서 관리
- 카프카가 전사 데이터 파이프라인으로 동작하기 떄문에 모든 데이터 스토어와 여기서 발생하는 데이터/이벤트가 카프카를 중심으로 연결되어 있다.
- 카프카가 제공하는 데이터를 이용해서 다양한 분석이 가능해짐
- 개발 입장에서도 여러 데이터 시스템에 의존하지 않고, 카프카에만 데이터를 전달하면 되기 때문에 본연의 업무에만 집중할 수 있게 됌
2. 카프카의 동작 방식과 원리
카프카는 기본적으로 메시징 서버로 동작한다.
- 프로듀서 혹은 퍼블리셔 : 메시지라고 불리는 데이터단위를 보내는 측
- 컨슈머 혹은 서브스크라이버 : 메시지를 가져가는 측
중앙에 메시징 시스템 서버를 두고 이렇게 메시지를 보내고 (publish) 받는 (subscribe) 형태의 통신을 펍/섭 모델이라고 한다. 펍/섭은 비동기 메시징 전송 방식으로서, 발신자의 메시지에는 수신자가 정해져있지 않은 상태로 발행한다. 구독을 신청한 수신자만이 정해진 메시지를 받을 수 있다. 이러한 구조 덕분에 다이나믹한 네트워크 토폴로지와 높은 확장성을 확보할 수 있다.
펍/섭 모델의 특징
- 프로듀서가 컨슈머에게 메시지를 직접 전달하지 않고, 중간의 메시싱 시스템에 전달한다.
- 컨슈머가 불능 상태가 되더라도 프로듀서는 메시지를 메시징 시스템에 전달할 수 있으며, 메시지는 유실되지 않는다. 그리고 컨슈머가 회복되면 다시 메시지를 가져간다.
- 각각의 개체가 N:N 통신을 하는것이 아니기 때문에 확장이 용이하다.
- 메시지가 정확하게 전달되었는지 확인하려면 코드가 복잡해진다.
- 메시지 전달 속도가 빠르지 않다. (중간에 메시징 시스템이 있기 때문에)
기존 메시징 시스템의 특징
- 메시지의 보관, 교환, 전달 과정에서 신뢰성을 보장하는 것에 중점을 맞췄기 때문에 속도와 용량은 그렇게 중요하지 않았음
- 카프카는 성능 단점을 극복하기 위해, 메시지 교환 전달의 신뢰성 관리를 프로듀서와 컨슈머 쪽으로 넘김
- 메시징 시스템 내에서의 작업량을 줄이고 이렇게 절약한 작업량을 메시징 전달 성능에 집중시켜서 고성능 메시징 시스템을 만듬
3. 카프카의 특징
프로듀서와 컨슈머의 분리
- 카프카는 메시징 전송 방식 중 메시지를 보내는 역할과 받는 역할이 완벽하게 분리된 펍/섭 방식을 적용함
- 각자의 역할이 완벽하게 분리되면서, 어느 한쪽 시스템에서 문제가 발생하더라도 연쇄작용이 발생할 확률은 매우 낮다.
멀티 프로듀서, 멀티 컨슈머
- 카프카는 하나의 토픽에 여러 프로듀서 또는 컨슈머들이 접근 가능한 구조로 되어있다.
- 데이터 분석 및 처리 프로세스에서 하나의 데이터를 다양한 용도로 사용하는 요구가 많아지기 시작했고, 멀티 기능 덕분에 이러한 요구를 손쉽게 충족할 수 있다.
디스크에 메시지 저장
- 디스크에 메시지를 저장하고 유지한다.
- 컨슈머가 메시지를 읽어가더라도 보관 주기 동안 디스크에 메시지를 저장해둔다.
확장성
- 카프카는 확장이 매우 용이하도록 설계되어 있다. 하나의 카프카 클러스터는 3대의 브로커로 시작해 수집 대의 브로커로 확장 가능하다.
- 확장 작업은 카프카 서비스의 중단 없이 온라인 상태에서 작업이 가능하다.
높은 성능
- 고성능을 유지하기 위해 카프카는 내부적으로 분산 처리, 배치 처리 등 다양한 기법을 사용하고 있다.
4. 카프카의 확장과 발전
- 카프카를 통해 ESB, 메시지 버스, 이벤트 버스 등과 같이 기업 내 데이터 흐름을 중앙에서 관리하는 많은 사례들이 생겨남
- 필요한 모든 데이터가 연결되어 서로 가져갈 수 있는 형태로 발전하고 있다.
- 오늘날의 카프카는 단순한 메시지 큐의 기능을 넘어 많은 기업의 비즈니스 확장 요구에 맞춰 기업 내 중요 시스템 중 하나로 널리 사용되고 있다.