Kafka 소개

김경민·2022년 6월 29일
post-thumbnail

카프카의 탄생


거대해진 아키텍쳐, 소스 애플리케이션과 타겟 애플리케이션의 개수가 많아짐에 따라 유지보수가 어려워짐

타겟 애플리케이션의 장애가 생기면 그 영향이 소스 애플리케이션에 영향을 미치는 경우도 발생.

파편화된 데이터 파이프라인을 개선하기 위해 링크드인의 데이터팀은 신규 시스템을 만들기로하였음.

그게 바로 아파치 카프카

카프카의 동작과 특징


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

웹 사이트, 애플리케이션, 센서 등에서 취합한 데이터 스트림을 한 곳에서 실시간으로 관리할 수 있게 된 것이다.

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

기존에 1대1 매칭으로 개발하고 운영하던 데이터 파이프라인은 한쪽의 이슈가 다른 한쪽에 영향을 미쳤으나
카프카는 이런 의존도를 타파하였다.

소스 애플리케이션에서는 어느 타겟 애플리케이션으로 보낼지 고민없이 일단 카프카로 전송한다.

카프 내부에서 데이터가 저장되는 파티션의 동작은 FIFO 방식의 큐 자료구조와 유사하다.

카프카를 통해 전달하는 데이터 포맷은 사실상 제한이 없다.

직렬화, 역직렬화를 통해 ByteArray로 통신하기 때문에 자바에서 선언 가능한 모든 객체를 지원한다.

상용 환경에서 카프카는 최소 3대 이상의 서버(브로커)에서 분산 운영하여 프로듀서를 통해 전송받은 데이터를 파일 시스템에 안전하게 기록한다. 여러대로 구성된 카프카 클러스터 중 일부 서버에 장애가 생기더라도 데이터를 지속적으로 복제하므로 안전하고 운영할 수 있다.

카프카의 역할


높은 처리량

카프카는 프로듀서가 브로커로 데이터를 보낼 때와 컨슈머가 브로커로부터 데이터를 받을 때 모두 묶어서 전송한다.

많은 양의 데이터를 송수신할 때 맺어지는 네트워크 비용은 무시할 수 없는 규모가 되는데,,

동일한 양의 데이터를 보낼 때 네트워크 통신 횟수를 최소한으로 줄인다면 동일 시간 내에 더 많은 데이터를 전송할 수 있다.

많은 양의 데이터를 묶음 단위로 처리하는 배치로 빠르게 처리할 수 있으니 대용량의 실시간 로그데이터를 처리하는 데에 적합하다.

확장성

상황에 따라 브로커의 운영을 유연하게 조절 할 수 있다.

데이터가 적을 때는 카프카 클러스터의 브로커를 최소한의 개수로 운영하다가 데이터가 많아지면 클러스터의 브로커 개수를 자연스럽게 늘려 스케일 아웃 할 수 있다.

반대로 데이터 개수가 적어지면 스케인 인 할 수 있다.

영속성

카프카는 다른 메시징 플랫폼고 ㅏ다르게 전송받은 데이터를 메모리에 저장하지 않고 파일 시스템에 저장한다.

디스크 기반의 파일 시스템을 활용한 덕분에 브로커 애플리케이션이 장애 발생으로 급작스럽게 종료되어도 재시작하여 안전하게 데이터를 처리할 수 있다.

고가용성

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

클러스터로 이루어진 카프카는 데이터의 복제를 통해 고가용성의 특징을 가지게 되었다.

프로듀서에게 전송받은 데이터를 여러 브로커 중 1대의 브로커에 저장하는 것이 아니라, 또 다른 브로커에도 저장하는 것이다.

한 브로커에 장애가 발생하더라도 복제된 데이터가 나머지 브로커에 저장되어 있으므로 저장된 데이터를 기준으로 지속적으로 데이터 처리가 가능하다.

profile
직진

0개의 댓글