항상 웃음이 나는 픠식팀 입니다.
오늘은 Kafka에 대해서 한번 알아 보았습니다
Kafka란?
높은 퍼포먼스(고성능)의 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 제공하는 분산 이벤트 스트리밍 플랫폼이다.
이벤트 스트리밍 플랫폼
Kafka는 세 가지 주요 기능을 결합하여 ent-to-end 이벤트 스트리밍을 구현
- 이벤트 스트림을 지속적으로 발행(publish-write), 구독(subscribe-read) 합니다.
- 이벤트 스트림을 원하는 만큼 내구성 있고 안정적으로 저장합니다.
- 이벤트 스트림을 발생 시 또는 소급하여 처리 한다.
이 모든 기능은 분산되고 확장성이 뛰어나고 탄력적이며 내결함성이 있으며 안전한 방식으로 제공됩니다.
Message Queue : MQ
메시지 지향 미들웨어(Message Oriented Middleware: MOM)은 비동기 메시지를 사용하는 각각의 응용 프로그램 사이의 데이터 송수신을 의미하고, 이를 구현한 시스템을 메시지 큐라고 합니다.
기본 구조
카프카 클러스터 : 메시지를 저장하는 저장소, 여러개의 브로커로 구성
브로커 : 각각의 서버, 메시지를 나눠서 저장, 이중화 처리, 장애가 나면 대체
주키퍼 클러스터(앙상블) : 카프카 클러스터를 관리, 카프카 클러스터와 관련된 정보가 저장이 된다.
프로듀서 : 카프카 클러스터에 메시지를 넣는 역할
컨슈머 : 카프카에서 메시지를 읽어 와서 필요한 처리를 하는 역할
카프카 클러스터는 데이터를 이동하는데 필요한 핵심역할을 맡게 된다
토픽과 파티션
- 토픽 : 메시지를 구분하는 단위, 파일 시스템의 폴더와 유사
- 한 개의 토픽은 한 개 이상의 파티션으로 구성
- 파티션은 메시지를 저장하는 물리적인 파일
프로듀서는 메시지를 카프카에 저장할 때 어떤 토픽에 저장해줘! (요청)
컨슈머는 어떤 토픽에서 메시지를 읽어올래!
파티션과 오프셋, 메시지 순서
- 파티션은 추가만 가능한(append-only) 파일
- 각 메시지 저장 위치를 오프셋(offset)이라고 한다.
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가
- 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽음
- EX) 컨슈머가 3번 오프셋 부터 데이터를 읽어줘 하면 3번 이후의 번호만 읽을 수 있다.
- 메시지는 삭제되지 않음(설정에 따라 일정 시간이 지난 뒤 삭제)
여러 파티션과 프로듀서
- 프로듀서는 라운드 로빈 또는 키로 파티션 선택
- 같은 키를 갖는 메시지는 같은 파티션에 저장 → 같은 키는 순서 유지
여러 파티션과 컨슈머
- 컨슈머는 컨슈머 그룹에 속함
- 한 개 파티션은 컨슈머 그룹의 한 개 컨슈머만 연결 가능
- 즉 컨슈머 그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없다.
- 한 컨슈머 그룹 기준으로 파티션의 메시지는 순서대로 처리
성능
- 파티션 파일은 OS 페이지 캐시 사용
- 파티션에 대한 파일 IO를 메모리에서 처리
- 서버에서 페이지 캐시를 카프카만 사용해야 성능에 유리
- Zero Copy
- 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사
- 컨슈머 추적을 위해 브로커가 하는 일이 비교적 단순
- 메시지 필터, 메시지 재전송과 같은 일은 브로커가 하지 않는다.
- 프로듀서, 컨슈머가 직접 해야 한다
- 브로커는 컨슈머와 파티션 간 매핑 관리한다.
- 메시지 필터, 메시지 재전송과 같은 일은 브로커가 하지 않는다.
- 묶어서 보내기, 묶어서 받기(batch)
- 프로듀서 : 일정 크기만큼 메시지를 모아서 전송 가능
- 컨슈머 : 최소 크기만큼 메시지를 모아서 조회 가능
- 낱개로 처리하는 것보다 처리량이 증가된다.
카프카와 성능
- 처리량 증대(확장)이 쉽다.
- 1개 장비의 용량 한계 → 브로커 추가, 파티션 추가
- 컨슈머가 느림 → 컨슈머 추가(또는 파티션을 추가)
- 수평확장이 굉장히 용이한 구조를 가지고 있다.
리플리카 - 복제
- 리플리카 : 파티션의 복제본
- 복제수(replication factor) 만큼 파티션의 복제본이 각 브로커에 생긴다
- 동일한 데이터를 가진 파티션이 각 브로커에 생긴다
- 복제수(replication factor) 만큼 파티션의 복제본이 각 브로커에 생긴다
- 리더와 팔로워로 구성
- 프로듀서와 컨슈머는 리더를 통해서만 메시지 처리
- 팔로워는 리더로 부터 복제
- 장애 대응
- 리더가 속한 브로커 장애시 다른 팔로워가 리더가 된다.
https://www.youtube.com/watch?v=0Ssx7jJJADI
'IT KNOWLEDGE' 카테고리의 다른 글
Llama Index 실습(OpenAI API 활용) (0) | 2023.07.07 |
---|---|
Rancher로 Kubernetes 환경 구축하기 - 설치 및 개요 (0) | 2023.07.06 |
LlamaIndex 설치 & OpenAI API 키 발급 방법 (0) | 2023.06.23 |
메모리 구조 (0) | 2023.06.22 |
Kubeflow 개요 및 특징 (0) | 2023.06.19 |
댓글