본문 바로가기

공부/Kafka

Kafka - 기초적인 내용 및 실습하기

Bing Image Creator로 생성한 사진

 

카프카를 간단하게 정리해보고 실습해보려고 한다.

- 카프카란?

Fortune 100대 기업 중 80% 이상이 Kafka를 신뢰하고 사용하고 있습니다.

Apache Kafka는 수천 개의 회사에서 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 ​​및 미션 크리티컬 애플리케이션을 위해 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

카프카 공식 홈페이지에 나온 카프카 설명이다. 요약하자면 카프카는 분산 이벤트 스트리밍 플랫폼이다.

 

- 이벤트 스트리밍이란?

데이터베이스, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스에서 이벤트 스트림 형태로 실시간으로 데이터를 캡처하는 방식입니다.

즉 배치처리와 상반된 개념을 가진다.

 

- 기본구조

카프카의 핵심 구성요소는 브로커, 프로듀서, 컨슈머가 있다.

 

브로커는 일종의 서버로 메시지를 저장한다.

프로듀서는 메시지를 생산해 브로커로 보낸다.

컨슈머는 브로커를 확인하고 메세지를 가져간다. 

 

토픽은 브로커에 들어오는 메시지를 주제별로 나누는 일족의 폴더라고 생각할 수 있다.
또한 토픽에는 파티션이 존재하는데 파티션은 데이터의 복제, 분산처리를 용이하게 한다. 

 

간단한 구조로 그려보았다. 1개의 브로커 1개의 토픽 1개의 파티션이 있다.

 

 

여기서 컨슈머가 늘어난다면?

하나의 토픽을 여러 컨슈머가 동시에 구독할 수 있다.

 

추가로 컨슈머 그룹을 설정할 수 있는데 컨슈머 그룹이란 개별 컨슈머를 하나로 묶는 논리적인 그룹 단위이다.

Consumer1과 Consumer2를 하나의 컨슈머 그룹으로 묶으면 커다란 하나의 컨슈머로 취급되어 하나의 개별 컨슈머만 메시지를 받을 수 있게된다.

 

* 컨슈머 그룹의 핵심 기능 

  • Partition Assignment 기능: 메시지 스트림의 파티션을 컨슈머에 할당하는 기능.(컨슈머 그룹의 리더 컨슈머가 처리)
  • Offset Commit 기능: 컨슈머가 읽은 마지막 메시지 오프셋을 저장하여, 다음에 읽을 위치를 추적하는 기능.

 

 

 

메시징을 두개의 개별 컨슈머로 병렬처리 하고 싶다면 파티션을 늘리면 된다. 참고로 하나의 컨슈머 그룹에서 특정 파티션을 구독하는 개별 컨슈머는 하나만 가능하다. 즉 1:n 관계 (같은 메시지 중복처리를 방지할 수 있음)

이렇게 되면 프로듀서가 생산한 메시징을 컨슈머1과 컨슈머2가 병렬처리 한다.
프로듀서에 각 파티션으로 메시지를 전송하는 방식은 키값을 사용하거나 라운드 로빈 방식으로 전송할 수 있다.
키값을 사용하면 원하는 파티션에 메시지를 전송할 수 있고 라운드 로빈 방식은 메시지를 순차적으로 균등하게 분배한다.

 

 

- 실습

간단하게 실습해보았다.

싱글 브로커의 하나의 토픽에 파티션 3개, 컨슈머 3개 프로듀서 1개 구성이다.

그림으로 그려보면 이러한 형태

프로듀서가 생산한 메시지 20개를 컨슈머들이 나눠서 처리하는 것을 볼 수 있다.

여기서 컨슈머와 파티션을 복제하면 처리 속도를 높일 수 있고, 브로커를 복제해 고가용성을 확보하기도 용이하다!