🎈카프카(Kafka)란 ?
카프카는 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 설계된
고성능 분산 이벤트 스트리밍 플랫폼이다.
🎈이벤트 스트리밍 플랫폼이란?
이벤트 스트리밍은
DB, 센서, 모바일 장치, 클라우드 서비스 및 소프트웨어 애플리케이션과 같은 이벤트 소스로부터
실시간 데이터를 이벤트 스트림 형식으로 획득하는 방식을 말한다.
Kafka는 세 가지 주요 기능을 결합하여 end-to-end 이벤트 스트리밍을 구현할 수 있다.
- 이벤트 스트림을 지속적으로 발행(publish-write), 구독(subscribe-read) 한다.
- 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장(store) 한다.
- 이벤트 스트림 을 발생 시 또는 소급하여 처리(Process)한다.
🎈카프카(Kafka)를 사용하기 위해서는 크게 4개의 구성요소가 필요하다!
1. 카프카 클러스터
- 메세지를 저장하는 저장소를 의미한다.
- 하나의 카프카 클러스터는 여러 개의 브로커(=각각의 서버)로 구성 된다.
- 데이터를 이동시키는 핵심 역할을 한다.
2. 주키퍼 클러스터(앙상블)
- 카프카 클러스터를 관리하는 용도로 주키퍼가 필요하다.
- 주키퍼 속에 카프카 클러스터와 관련된 정보가 기록되고 관리가 된다.
3. 프로듀서
- 메세지를 카프카에 넣는 역할을 한다.
4. 컨슈머
- 메세지를 카프카에서 읽어오는 역할을 한다.
카프카에 저장되는 메시지는 topic으로 분류되며
topic은 여러개의 patition으로 나눠진다.
🎈토픽
- 토픽은 메시지를 구분하는 단위이다.
- 여러 메세지가 있을 때 이 메세지가 어떤 종류의 메세지인지 구분할 때 사용된다.
- 파일시스템의 폴더, 메일함과 유사하다. (ex) 주문용 토픽, 결제용 토픽 등
- 프로듀서와 컨슈머가 토픽을 기준으로 메시지를 주고 받는다.
🎈파티션
- 메세지를 저장하는 물리적인 파일이다.
- 한 개의 토픽은 한 개 이상의 파티션으로 구성된다.
- 파티션은 추가만 가능한(append-only) 파일이다.
🎈오프셋
- 각 메시지 저장 위치를 오프셋(offset)이라고 한다.
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가된다.
- 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽는다.
- 파티션의 메시지 파일은 처리 후에도 계속 저장되어 있우며 설정에 따라 일정시간 뒤 삭제된다.
🎈프로듀서는 어떤 파티션에 메세지를 저장할까?
- 프로듀서는 메시지(이벤트)를 발행하여 생산(Wirte) 하는 주체이다.
- 프로듀서는 메시지 전송 시 토픽을 지정한다.
- 파티션은 라운드로빈 방식 혹은 파티션 번호를 지정하여 넣을 수 있다.
- 같은 키를 갖는 메시지는 같은 파티션에 저장 되며 순서 유지된다.
🎈파티션과 컨슈머의 관계
- 컨슈머는 컨슈머그룹에 속할 수 있다.
- 한 개 파티션은, 컨슈머그룹의 한 개 컨슈머에만 연결 가능하다.
- (ex) 위 그림에서 그룹 A에 있는 컨슈머 1과 컨슈머 2는
- 파티션 0이나 파티션1에 각각 연결할 수 있고
- 컨슈머 1과 2가 파티션 0을 함께 공유하는 것은 불가하다.
- 컨슈머 1과 2가 파티션 1을 함께 공유하는 것은 불가하다.
- 그래서 1개 컨슈머가 1개 파티션과만 연결할 수 있기 때문에 ----> 컨슈머 그룹 기준으로 파티션의 메세지가 순서대로 처리되는 것을 보장할 수 있다.
- 보통 파티션과 컨슈머는 1:1이 best practice로 본다.
🎈왜 카프카를 사용하면 좋을까?
- 고성능
- 다중 프로듀서, 다중 컨슈머가 상호 간섭없이 메시지를 쓰고 읽어서 처리할 수 있다.
- 디스크 기반의 이벤트 보존
- 지속해서 보존 가능하다. 데이터 유실 위험이 적고 컨슈머가 항상 떠있지 않아도 된다.
- 장애 발생 시 유실 복구가 가능하다.
- 파티션 파일은 OS 페이지 캐시를 통해, IO를 메모리에서 처리하기 때문에 성능이 좋다.
- Zero Copy를 통해 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사
- 브로커(=각각의 서버)가 하는일이 비교적 단순하다.
- 브로커는 컨슈머와 파티션간 맵핑 관리만 하며 성능에 집중한다.
- 메시지 필터, 메시지 재전송과 같은 일은 프로듀서와 컨슈머에 위임한다.
- batch 기능을 제공하여 동시 처리량 증가
- 프로듀서 : 일정 크기만큼 메시지를 모아서 전송한다.
- 컨슈머 : 최소 크키만큼 메시지를 모아서 읽어온다.
- 확장성(scale out) : 수평 확장이 쉽게 가능하다. -> 브로커,파티션, 컨슈머 추가
- 고가용성(HA- High Availability)
- Kafka의 topic은 partition이라는 단위로 쪼개어져 클러스터의 각 서버들에 분산되어 저장되고,
- 고가용성을 위하여 복제(replication) 설정을 할 경우 이 또한 partition 단위로 각 서버들에 분산되어 복제되고
- 장애가 발생하면 partition 단위로 fail over가 수행된다.
- Replication : 토픽 내 파티션의 복제본을 의미한다. replication-factor를 통해 개수를 지정할 수 있다.
- 복제수(replication factor)만큼 파티션의 복제본이 각 브로커에 생김
- 토픽 생성 시 복제수를 2로 하면 파티션이 2개가 각각의 브로커에 생김
- leader와 follower로 구성
- 프로듀서&컨슈머는 리더를 통해서만 메시지를 처리한다.
- 팔로워는 리더가 속한 브로커에서 메시지를 복제한다.
- 리더가 속한 브로커에 장애가 나면 다른 팔로워가 리더가 되어서 처리한다.
'Programming > 프로그래밍 내용 정리' 카테고리의 다른 글
VPN이란? (0) | 2022.07.31 |
---|---|
[내용정리] 토스 SLASH 22 - 토스뱅크의 완전히 새로운 대출 시스템 (1) | 2022.07.30 |
[OS] Context Switching이란? (0) | 2022.07.29 |
[자료구조] Linked List(연결 리스트) 와 Array(배열)의 차이 (0) | 2022.07.29 |
[운영체제] 프로세스 vs 스레드 vs 멀티스레드 차이점이 뭔가요? (0) | 2022.06.28 |