반응형
Kafka란?
- 분산 이벤트 스트리밍 플랫폼
- 고가용성으로 데이터를 손실없이 복구 가능
- 낮은 지연과 높은 처리량으로 많은 데이터를 처리 가능
Kafka의 기본구조
- Producer(프로듀서)
- 카프카 클러스터로 메시지(이벤트) 전송
- Kafka Cluster (카프카 클러스터)
- 메시지(이벤트)를 저장 (저장하는 곳은 Topic)
- 하나의 클러스터내에 여러개의 브로커(=서버)가 존재함.
- 브로커내에 메시지를 나눠서 저장하며, 브로커를 통한 이중화 및 장애 대응
- Zookeeper Cluster(주키퍼 클러스터, 주키퍼 앙상블)
- 카프카 클러스터 관리
- Consumer (컨슈머)
- 메시지(이벤트)를 카프카 클러스터에서 읽음
Kafka Topic (토픽)
- 다양한 데이터가 들어가는 공간
- 데이터베이스의 테이블 혹은 파일시스템의 폴더와 유사한 성질
- 토픽에 프로듀서가 데이터를 넣고, 컨슈머가 데이터를 가져감
- 담는 데이터를 토픽명으로 정확하게 명시하면 추후 유지보수시 용이함
- 한개의 토픽은 한개 이상의 파티션으로 구성 (파티션 : 메시지를 저장하는 물리적인 파일)
Kafka Partition (파티션)
- 하나의 토픽은 여러개의 파티션으로 구성가능.
- 여러개의 파티션인 경우 컨슈머 개수를 증가 시켜 데이터 처리를 분산 가능
- 단, 파티션 증가는 가능하나, 축소는 되지 않기에 증가시 주의 필요.
- 첫번째 파티션은 0번 부터 시작.
- 파티션은 큐와 같이 내부의 데이터가 파티션 끝부터 순차적으로 쌓임.
- 쌓인 데이터는 FIFO형태로 순서대로 컨슈머가 메시지를 가져감. 메시지가 들어오지 않으면 다른 메시지가 들어올때까지 기다림.
- 컨슈머가 메시지를 가져가더라도 메시지는 삭제되지 않고, 추후 다른 컨슈머가 연결되었을때 다시 0번의 메시지부터 가져가서 사용 할 수 있음. 또한 offset을 통한 특정 위치 기준으로 순서대로 읽을 수도 있음. (단, 컨슈머 그룹이 상이해야하고, “auto.offset.rest = earliest”로 설정되어있어야함)
- 메시지는 설정에 따라 삭제 될 수 있음 (log.retention.ms-시간 / log.retention.byte-크기)
- 파티션이 여러개인 경우
- 키가 null → “라운드 로빈”방식으로 할당
- 키가 있고 → 키의 해시값을 구한 후, 같은 키의 파티션에 할당 (= 같은 키는 순서 유지)
Kafka Consumer (컨슈머)
- 컨슈머가 메시지를 가져가도 메시지는 존재함.
- 데이터 파이프라인으로 운영하는데 있어서의 핵심
- 데이터는 Topic내의 파티션에 존재하며, 컨슈머는 파티션내의 데이터를 가져옮(=폴링)
- 컨슈머는 컨슈머 그룹에 속함
- 한개의 파티션은 컨슈머 그룹의 하나의 컨슈머만 연결 가능 (’가’파티션에 대하여, 컨슈머 그룹내 A,B에서 A만 연결 가능, B는 다른 파티션 연결 가능)
- 한개의 컨슈머 그룹 기준으로 파티션의 메시지는 순서대로 처리됨 (연결된 파티션이 1개밖에 없기 때문)
출처
728x90
반응형
'Server' 카테고리의 다른 글
Docker 에러 해결 하기 (0) | 2024.02.20 |
---|---|
[Docker] 에러 해결법 정리 (0) | 2023.01.02 |
[Linux] Swap Memory (스왑 메모리) 설정 방법 (3) | 2022.07.13 |