[KAFKA] 아파치 카프카의 기본

.·2023년 3월 25일

KAFKA

목록 보기
1/21
post-thumbnail

1. 카프카의 탄생

  • 데이터를 생성하는 소스 애플리케이션과 최종적으로 데이터가 적재되는 타깃 애플리케이션의 연결을 위해 탄생
  • 소스 어플리케이션과 타깃 어플리케이션의 개수가 많아짐에 따라 파이프라인이 복잡해짐
  • 각각의 어플리케이션을 따로따로 연결하는 것이 아닌 카프카를 통해 한 곳에 데이터를 모아서 데이터를 처리할 수 있도록 중앙집중화함

2. 카프카의 내부 구조

프로듀서가 토픽의 특정 파티션으로 레코드를 차례대로 적재
컨슈머가 토픽의 여러 파티션을 구독하여 먼저 들어온 순으로 레코드를 가져감

토픽

  • DB의 테이블과 같은 개념
  • 데이터의 구분에 따라 토픽을 운영

파티션

  • 토픽 안에 1개 이상의 파티션을 가짐
  • 데이터가 토픽 안의 하나의 파티션에 저장됨
  • 파티션의 내부 구조는 선입선출(FIFO)의 큐(queue) 구조와 동일
  • 먼저 들어온 데이터부터 쌓이고, 먼저 들어온 데이터부터 순차적으로 컨슈밍함

프로듀서

  • 토픽의 파티션으로 데이터 송신
  • 특정 메시지를 보내면 토픽의 여러 파티션 중 하나의 파티션에 저장 (토픽의 모든 파티션에 저장되는 것이 아님)
  • 들어온 데이터 순서대로 데이터를 적재

컨슈머

  • 토픽의 파티션에 있는 데이터를 소비
  • 적재된 순서대로 차례대로 데이터를 가져감
  • 컨슈머가 파티션의 데이터를 가져가더라도 데이터는 삭제되지 않음
  • 특정 컨슈머가 데이터의 어디까지 읽었는지를 커밋을 통해 기록

브로커

  • 한 개의 클러스터는 여러 개의 브로커로 구성
  • 각각의 브로커는 카프카 프로세서
  • 프로듀서에서 데이터를 전송하면 각각의 카프카 브로커에 데이터 저장
  • 프로듀서에서 데이터를 보내면 그 메시지는 모든 브로커에 복제되어 저장됨

3. 카프카의 장점

높은 처리량

  • 카프카 브로커로 송신, 브로커에서 데이터 수신 시 모두 묶음 단위로 처리할 수 있도록 배치(batch)로 묶어서 일괄적으로 전송할 수 있는 옵션이 있음
    -> 데이터 송신 시 네트워크 통신 횟수를 줄임
  • 하나의 파티션에 하나의 컨슈머가 할당되는데, 데이터를 여러 파티션에 분배하도록 파티션을 추가하고 파티션 개수만큼 컨슈머 개수를 늘려 병렬 처리 가능
    -> 초당 데이터 처리량 증가

확장성

  • 파이프라인 운영 시 데이터의 양을 예측하기 어려움
  • 각각의 브로커가 처리할 수 있는 데이터 처리량에 한계가 있음
  • 데이터가 적을 때는 카프카 브로커 개수를 줄여 최소한으로 운영 (scale-in)
  • 데이터가 많아지면 카프카 브로커 개수를 늘림 (scale-out)

영속성

  • 데이터를 파일 시스템에 저장
  • 페이지 캐시 메모리 영역을 사용해 한번 읽은 파일 내용은 OS차원의 메모리에 저장해두고 재사용
  • 브로커에 장애가 발생해도 재시작하면 파일 시스템의 데이터를 복구시켜 처리할 수 있음

고가용성

  • 프로듀서에서 받은 메시지를 여러 브로커에 복제하여 저장
  • 카프카 클러스터로 묶인 여러 브로커 중에서 한 대의 브로커에 장애가 발생하더라도 나머지 브로커를 통해 데이터를 가져갈 수 있음

0개의 댓글