본문 바로가기
Framework/Kafka

[Kafka] 아파치 카프카 (Apache Kafka) 란?

by 미미믹 2024. 8. 23.

아파치 카프카 애플리케이션 프로그래밍 with 자바 책 공부 내용 정리

1. 카프카의 탄생

링크드인 개발자들이 파편화된 데이터 파이프라인을 개선하기 위해 만든 시스템.

카프카는 각각의 애플리케이션끼리 연결하여 데이터를 처리하는 것이 아니라,
한 곳에 모아 처리할 수 있도록 중앙집중화했다.

카프카는 기업의 대용량 데이터를 수집하고 이를 실시간 스트림으로 소비할 수 있게 만들어주는 일종의 중추 신경으로 동작한다고 볼 수 있다.

=> 카프카를 중앙 배치함으로써 소스 애플리케이션과 타깃 애플리케이션 사이의 의존도를 최소화 하여 커플링 완화

카프카 내부에 저장되는 파티션의 동작은 FIFO(First In First Out) 방식의 큐 자료구조와 유사

카프카 프로듀서, 컨슈머, 토픽 모식도

큐에 데이터를 보내는 것이 프로듀서

큐에서 데이터를 가져가는 것이 컨슈머

카프카를 통해 전달할 수 있는 데이터 포맷은 사실상 제한이 없다.
직렬화, 역직렬화를 통해 ByteArray로 통신하기 때문에 자바에서 선언 가능한 모든 객체를 지원한다.
커스텀 직렬화/역직렬화 클래스(Serializer<T>, Deserializer<T>)를 상속받아 개발하여 사용할 수도 있다.

상용 환경에서 카프카는 최소 3대 이상의 서버(브로커)에서 분산 운영하여 프로듀서를 통해 전송받은 데이터를 파일 시스템에 안전하게 기록한다.

토픽 :: 카프카에서 데이터를 구분하는 가장 기본적인 개념
카프카 클러스터에 토픽이 여러개 존재할 수 있음

파티션 :: 토픽을 구성하는 중요한 요소.


2. 카프카의 역할

  • 높은 처리량

카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.
많은 양의 데이터를 묶음 단위로 처리하는 배치로 빠르게 처리할 수 있기 때문에 대용량의 실시간 로그데이터를 처리하는 데 적합하다.
또한, 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고 데이터를 병렬처리할 수 있다.

  • 확장성

카프카는 가변적인 환경에서 안정적으로 확장 가능하도록 설계되어있다.
카프카 클러스터의 브로커를 최소한의 개수로 운영하다 데이터가 많아지면 클러스터의 브로커 개수를 자연스럽게 늘려 스케일 아웃(scale-out) 할 수 있다.
반대로 데이터 개수가 적어지고 추가 서버들이 더는 필요없어지면 브로커 개수를 줄여 스케일 인(scale-in) 할 수 있다.

  • 영속성

카프카는 다른 메시징 플랫폼과 다르게 전송받은 데이터를 메모리에 저장하지 않고 (운영체제 레벨에서 파일 시스템을 최대한 활용하여) 파일 시스템에 저장한다.
운영체제에서는 파일I/O 성능 향상을 위해 페이지 캐시(page cache) 영역을 메모리에 따로 생성하여 사용한다. 페이지 캐시 메모리 영역을 사용하여 한번 읽은 파일 내용은 메모리에 저장시켰다가 다시 사용하는 방식이기 때문에 카프카가 파일 시스템에 저장하고 데이터를 저장, 전송하더라도 처리량이 높다.

  • 고가용성

3개 이상의 서버들로 운영되는 카프카 클러스터는 일부 서버에 장애가 발생하더라도 무중단으로 안전하고 지속적으로 데이터를 처리할 수 있다.

* 카프카를 안전하게 운영하기 위해 최소 3대 이상의 브로커로 클러스터를 구성할 것을 추천한다.
카프카 클러스터를 구축할 때 브로커 개수의 제한은 없다.
min.insync.replicas 옵션을 2로 설정하면 최소 2개 이상의 브로커에 데이터가 완전 복제됨을 보장한다. 즉, 옵션을 2로 사용할 때는 브로커를 3대 이상으로 운영해야만 한다.
min.insync.replicas 옵션값보다 작은 수의 브로커가 존재할 때는 토픽에 더는 데이터를 넣을 수 없다.

카프카 생태계 모식


참고 도서 정보 :: 아파치 카프카 애플리케이션 프로그래밍 with 자바