Search

[상세 내용] 카프카 개요

2022.10.15(토) ~ 2022.10.16(일)

카프카는 어떤 히스토리를 가졌을까?

링크드인 내부에서 문제를 해결하기 위해 등장하였고, 도입 이후 실시간 처리가 원활하여 큰 성공을 거두었다.
카프카는 실시간 데이터 플랫폼 혹은 이벤트 스트리밍 플랫폼이라 불린다.

카프카 주요 서비스 출시일(2011년 공개)

리플리케이션 기능 추가(v0.8) : 데이터 유실 없이 안정성을 보장하기 위해 공개되었다.
스키마 레지스트리 공개(v0.8.2) : 핵심 모델인 펍/섭 모델로 많은 문제를 해결하였지만, 규모가 커지면서 비효율적인 문제 & 데이터 분석 및 파싱하는데 많은 시간을 소요하는 문제 → 이를 해결하기 위해 프로듀서와 컨슈머 간에 데이터 구조를 설명할 수 있는 스키마를 등록해 지정하는 스키마 레지스트리가 공개되었다.
카프카 커넥트 공개(v0.9) : 다양한 데이터베이스, 카프카와 인터페이싱하는 경우가 많아지면서 해당 시스템과 카프카를 하나하나 연동하는 클라이언트를 개발하고 유지보수해야 하는 문제를 해결하기 위해 공개되었다. 즉, 카프카 커넥트로 별도 코드 작성 없이 다양한 프로토콜과 카프카를 연동할 수 있다.
카프카 스트림즈 공개(v0.10) : 실시간 처리에 대한 니즈를 충족시키기 위해 공개되었다. 이를 통해 실시간 분석 및 처리가 가능해졌다.
KSQL 공개 : SQL 기반으로 실시간 처리가 가능해졌다.
주키퍼 의존성 해방(v3.0) : 주키퍼는 높은 성능을 갖는데 장벽이 되는 문제가 있었다. 이를 해결하기 위해 주키퍼 없이 동작 가능한 카프카가 공개되었다.

카프카는 어떤 문제를 해결하고자 했을까?

주요 문제

데이터에 대한 정합성
이벤트들의 변경 순서 보장

데이터 오차를 줄이기 위한 API & PostgreSQL의 한계점

데이터의 오차를 줄이기 위해 API & PostgreSQL로 해결하고자 했으나 아래 한계점이 존재한다.
여러 네트워크를 이용하는 환경에서 모든 데이터 변경에 대해 올바른 전달 보장 문제
동이한 데이터 동시 수정 시, 정확한 순서를 보장해야 하는 문제
수정된 데이터들을 정확한 순서대로 아웃바운드 전송하는 문제
다양한 클라이언트들의 요구사항을 효율적으로 지원하기 어려운 문제
빠른 전송을 위해 클라이언트 또는 대량의 배치 전송을 위한 클라이언트를 지원하기 어려운 문제

아래 고민을 한다면 카프카를 고려해보자

동기/비동기 데이터 전송에 대한 고민
실시간 데이터 처리에 대한 고민
현재의 데이터 처리에 대한 한계를 느낌
새로운 데이터 파이프라인의 복잡함
데이터 처리의 비용 절감을 고려하는 중

카프카의 주요 기능은 무엇일까?

높은 처리량

카프카의 가장 큰 장점 중에 하나이며, 왜 높은 처리량을 갖게 되었는지는 다음 장에서 설명하고자 한다.

순서 보장

이벤트 처리 순서가 보장되며, 엔티티 간의 유효성 검사 및 동시 수정 같은 복잡성들을 제거한다.
위와 같은 이유로 구조 또한 간결해졌다.

적어도 한 번(at least once) 전송 방식

멱등성, idempotent - 동일한 작업을 여러 번 수행하더라도 결과가 달라지지 않는 것을 의미한다. - 분산된 네트워크 환경의 데이터 처리에서 가장 중요한 것은 멱등성이다.
프로듀서가 재전송해도 데이터 변화가 일어나지 않는다.
간혹 이벤트 중복이 발생할 수 있으나, 누락 없는 재전송이 가능하므로 메시지 손실에 대한 걱정이 없다.
백엔드에서 중복 메시지 처리가 가능하도록 허용한다면, 복잡한 트랜잭션 처리가 필요하지 않다.
위에 내용과 같은 이유로 아키텍처는 더욱 단순해지고, 처리량 또한 높아진다.

자연스러운 백프레셔 핸들링

성능과 편리함에 집중하기 위해 카프카 클라이언트는 풀(pull) 방식으로 동작한다.
풀(pull) 방식 : 자기 자신의 속도로 데이터를 처리할 수 있다.
푸시 방식 : 브로커가 보내주는 속도에 의존해야 한다.
카프카 클라이언트는 복잡한 피드백이나 제한의 요구사항이 사라져 간단하고 편리하게 구현 가능하다.

강력한 파티셔닝(카프카 파니셔닝)

논리적으로 토픽을 여러 개로 나눌 수 있다.
각 파티션들을 다른 파티션과 관계없이 처리 가능하다.
효과적인 수평 확장이 가능하다.

그 외 여러 가지 기능

로그 컴팩션 : 스냅샷 역할이 가능하다.
프로듀서와 컨슈머가 완벽하게 분리된 비동기 방식
애플리케이션 병목 현상을 정확하게 파악할 수 있다.
모니터링을 통해 지연에 대한 문제를 빠르게 해결할 수 있다.

카프카의 어떤 특징이 있을까?

높은 처리량과 낮은 지연시간

메시징 시스템인 펄사(Pulsar), 래빗MQ(RabbitMQ)와 비교해도 처리량이 가장 높다.
참고로 응답 속도는 래빗MQ가 가장 빠르다.
처리량과 응답 속도를 같이 비교하면 카프카가 독보적이다.

높은 확장성

아무리 높은 처리량이라도 분명 한계는 존재한다. 이러한 문제는 확장이 가능하다면 해결 가능하다. 카프카는 손쉬운 확장이 가능하므로 높은 확장성은 큰 장점으로 다가올 수 있다.

고가용성

고가용성은 시스템이 오랜 기간 지속적으로 장애 없이 정상 운영이 가능한 성질을 의미한다.
메시지(레코드)를 빠르게 처리하는 것도 중요하지만 고가용성 측면도 중요하게 여기고 있다.
이를 위해 카프카는 클러스터 내 리플리케이션 기능을 추가하면서 고가용성을 확보했다.

내구성

카프카로 메시지 전송할 때, 프로듀서의 acks 옵션을 이용하여 메시지의 내구성을 강화할 수 있다.
acks=all : 강력한 메시지의 내구성을 원한다면 해당 옵션을 이용한다. 해당 옵션으로 카프카로 전송되는 모든 메시지는 안전한 저장소인 카프카의 로컬 디스크에 저장한다.
카프카는 다른 메시지 시스템과 달리 컨슈머가 메시지를 가져가더라도, 메시지는 삭제되지 않고 지정된 설정 시간 혹은 로그 크기만큼 로컬 디스크에 보관된다. 이로 인해 장애가 발생하더라도 과거 메시지들을 불러와 재처리 가능하다.

개발 편의성

카프카는 프로듀서컨슈머완벽하게 분리되어 서로 영향을 미치지 않는다.
프로듀서(producer) : 메시지를 전송하는 역할
컨슈머(consumer) : 메시지를 가져오는 역할
개발 편의성을 위해 카프카 커넥트스키마 레지스트리를 제공한다.
카프카 커넥트 : 프로듀서와 컨슈머를 따로 개발하지 않고도 카프카와 쉽게 연동 가능하다.
스키마 레지스트리 : 데이터 파싱을 효율적으로 이용할 수 있다.

운영 및 관리 편의성

그라파나(Grafana) : 모니터링에 필요한 모든 내용과 운영 노하우가 담겨있다.