-
Kafka란?프로그래밍 기초 공부 2023. 3. 31. 04:16
Kafka
빠른 확장 가능한 작업을 위해 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬어플리케이션을 처리하기 위한 목적으로 설계된 고성능 오픈소스 분산 이벤트 스트리밍 플랫폼
Pub-Sub 모델의 메시지 큐 형태로 동작하고, 분산환경에 특화되어 있음구성요소
- KafkaCluster :
- 카프카의 브로커들의 모임. Kafka는 확장성과 고가용성을 위하여 broker들이 클러스터로 구성
- Broker :
- 각각의 카프카 서버, 동일 노드에 여러 브로커를 띄울 수 있음
- Zookeeper :
- 카프카 클러스터 정보 및 분산처리 관리 등 메타데이터 저장. 카프카를 띄우기 위해 반드시 실행되어야 함
- Producer : 메시지(event)를 발행하여 생산(write) 하는 주체
- Consumer : 메시지(event)를 구독하여 소비(read) 하는 주체
- Producer와 Consumer는 완전 별개로 동작 함으로써 높은 확장성을 제공함
- 카프카에 저장되는 메시지는 topic으로 분류, topic은 여러개의 patition으로 나눠짐
- Topic : 메시지를 구분하는 단위
- 파일시스템의 폴더, 메일함과 유사
- ex) 주문용 토픽, 결제용 토픽 등
- 파일시스템의 폴더, 메일함과 유사
- Partition : 메세지를 저장하는 물리적인 파일
- 한 개의 토픽은 한 개 이상의 파티션으로 구성됨
- 파티션은 메시지 추가만 가능한 파일(append-only)
- offset : 파티션내 각 메시지의 저장된 상대적 위치
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가
- 자료구조 Queue 방식을 사용
- 컨슈머는 오프셋 기준으로 마지막 커밋 시점부터 메시지를 순서대로 읽어서 처리
- 파티션의 메시지 파일은 처리 후에도 계속 저장되어 있며 설정에 따라 일정시간 뒤 삭제됨
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가
- Producer:
- 메시지(이벤트)를 발행하여 생산(wirte) 하는 주체
- 프로듀서는 메시지 전송시 토픽을 지정
- 파티션은 파티션 번호를 지정하여 넣을 수 있음
- 같은 키를 갖는 메시지는 같은 파티션에 저장 되며 순서는 유지함
- Consumer :
- 메시지(이벤트)를 구독하며 소비(read)하는 주체
- Consumer Group
- 메시지를 소비하는 컨슈머들의 논리적 그룹
- Topic의 파티션은 컨슈머그룹과 1:N 매칭 관계로 동일 그룹내 한 개의 컨슈머만 연결 가능
- 이로써 파티션의 메시지는 순서대로 처리되도록 보장
- 특정 컨슈머에 문제가 생겼을때 Fail over를 통한 리밸런싱 가능
- 보통 파티션과 컨슈머는 1:1이 best practice로 봄
kafka 사용이유
성능이 좋음
- 다중 프로듀서, 다중 컨슈머가 상호 간섭없이 메시지를 쓰고 읽어서 처리
- 디스크 기반의 이벤트 보존
- 지속해서 보존 가능, 데이터 유실 위험이 적고 컨슈머가 항상 안떠있어도 됨
- 장애 발생시 유실 복구 가능
- 파티션 파일은 OS 페이지 캐시를 통해 IO를 메모리에서 처리하여 성능이 유리
- Zero Copy를 통해 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사
- 브로커가 하는일이 비교적 단순
- 브로커는 컨슈머와 파티션간 맵핑 관리만 하며 성능에 집중
- 메시지 필터, 메시지 재전송과 같은 일은 프로듀서, 컨슈머에 위임
- batch 기능을 제공하여 동시 처리량 증가
- 프로듀서 : 일정 크기만큼 메시지를 모아서 전송
- 컨슈머 : 최소 크키만큼 메시지를 모아서 읽어옴
- 확장성(scale out) : 수평 확장이 쉽게 가능
- 브로커,파티션, 컨슈머 추가
가용성이 좋음
- Kafka의 topic은 partition이라는 단위로 쪼개어져 클러스터의 각 서버들에 분산되어 저장되고, 고가용성을 위하여 복제설정을 할 경우 이 또한 partition 단위로 각 서버들에 분산되어 복제되고 장애가 발생하면 partition 단위로 fail over가 수행됨
- Replication : 토픽내 파티션의 복제본
- replication-factor를 통해 개수를 지정할 수 있음
- 복제수(replication factor)만큼 파티션의 복제본이 각 브로커에 생김
- 토픽 생성시 복제수를 2로 하면 파티션이 2개가 각각의 브로커에 생김
- leader와 follower로 구성
- 프로듀서와 컨슈머는 리더를 통해서만 메시지 처리
- 팔로워는 리더가 속한 브로커에서 메시지를 복제함
- 리더가 속한 브록커가 장애나면 다른 팔로워가 리더가 되어서 처리
특징
- 디스크에 메시지를 저장해서 영속성를 보장해줌
- 프로듀서와 컨슈머를 분리하고 멀티 프로듀서와 멀티 컨슈머를 지원함
- 프로듀서와 컨슈머 모두 배치 처리가 가능해서 네트워크 오버헤드를 줄일 수 있음
- 높은 성능과 고가용성과 확장성을 가짐
- 메시지 보장 여부를 선택할 수 있음
사용사례
- 증권 거래소, 은행 및 보험과 같은 실시간으로 지불 및 금융 거래를 처리
- 물류 및 자동차 산업과 같이 자동차, 트럭, 차량 및 선적을 실시간으로 추적하고 모니터링
- 공장 및 풍력 발전 단지와 같은 IoT 장치 또는 기타 장비의 센서 데이터를 지속적으로 캡처하고 분석
- 소매, 호텔 및 여행 산업, 모바일 애플리케이션과 같은 고객 상호 작용 및 주문을 수집하고 즉시 대응
- 병원에서 치료 중인 환자를 모니터링하고 상태 변화를 예측하여 응급 상황에서 시기 적절한 치료를 보장
- 회사의 여러 부서에서 생성된 데이터를 연결, 저장 및 사용 가능하게 만듦
- 데이터 플랫폼, 이벤트 중심 아키텍처 및 마이크로서비스(MSA)의 기반 역할
'프로그래밍 기초 공부' 카테고리의 다른 글
쿠버네티스란? (0) 2023.04.02 Docker 란? (0) 2023.04.01 JPQL 이란? (0) 2023.03.30 DAO, DTO, VO란? (0) 2023.03.23 Spring Annotation 정리 (0) 2023.03.13 - KafkaCluster :