-
[Kafka] Kafka Architecture📖 개발 공부/kafka 2023. 1. 14. 01:46
카프카란?
- 스트리밍 데이터를 다루기 위한 미들웨어와 그 주변 생태계
- 분산형 스트리밍 플랫폼(A distributed streaming platform)으로써 분산환경에 특화되어 있는 특징이 있다.
- 메시지를 특정 수신자에게 직접적으로 보내는 것이 아닌, 메시지를 받기 원하는 곳에서 해당 토픽을 구독함으로써 메시지를 읽는다.
카프카의 구성
Broker(브로커)
- Kafka에서 데이터를 수신, 전달하는 서비스이자 실행되는 Kafka Application Server
- 카프카 애플리케이션이 설치되어 있는 서버 또는 노드다.
- 하나의 Server 당 하나의 데몬 프로세스로 동작한다.
- 보통 가용성을 위해 3 Node Broker로 구성한다.
Zookeeper(주키퍼) 자세히 보기
- 분산 코디네이션 시스템, Broker와 1:1 로 구성 (마찬가지로 주로 3 Node Zookeeper 구성)
- Broker는 상태를 저장하지 않는다. -> Zookeeper를 사용해 클러스터 상태 유지한다. (메타정보 저장)
- Broker 내 Partition에서의 Leader(Master) 브로커를 선출한다.
- Broker의 존재/실패 관련한 정보를 Producer/Consumer에게 전달한다.
Topic(토픽)
- 프로듀서와 컨슈머들이 카프카로 보낸 자신들의 메시지를 구분하기 위한 네임으로 사용한다.
- 카프카에 저장되는 메시지는 topic으로 분류되고, topic은 여러개의 patition으로 나눠질수 있다.
Partition(파티션)
- 토픽을 구성하는 데이터 저장소로서 수평 확장이 가능한 단위(토픽을 분할)
partition 안에는 message의 상대적 위치를 내타내는 offset이 있는데 이 offet 정보를 이용해 이전에 가져간 메시지의 위치 정보를 알 수 있고 동시에 들어오는 많은 데이터를 여러개의 파티션에 나누어 저장하기 때문에 병렬로 빠르게 처리할 수 있다.
→ 병렬처리가 가능하도록 토픽을 나눌 수 있고, 많은 양의 메시지 처리를 위해 파티션 수를 늘릴 수 있다. - 무조건 파티션 수를 늘려야 하나?
- 파일 핸들러의 낭비
- 각 파티션은 브로커의 디렉토리와 매핑되고, 저장되는 데이터마다 2개의 파일(인덱스와 실제 데이터)가 있다.
- 카프카에서는 모든 디렉토리의 파일들에 대해 파일 핸들을 열게 되는데, 파티션 수가 많을 수록 파일 핸들 수가 많아져 리소스를 낭비하게 된다.
- 장애 복구 시간 증가
- 카프카는 높은 가용성을 위해 리플리케이션을 지원한다.
- 브로커에는 토픽이 있고, 토픽은 여러 개의 파티션으로 나뉘어 있다.
→ 각 파티션마다 레플리케이션이 동작하게 된다.
→ 브로커에는 여러 개의 파티션이 존재한다. - 브로커가 다운되면, 해당 브로커에 있는 리더가 있는 파티션은 일시적으로 사용할 수 없게 된다
- 카프카는 리더를 팔로워 중 하나로 이동시켜 클라이언트 요청을 처리할 수 있게 한다.
- (이와 같은 장애 처리는 컨트롤러로 지정된 브로커가 수행한다.)
- 파일 핸들러의 낭비
- 카프카에서 파티션 수를 줄이는 방법은 제공하지 않는다. → 토픽 삭제 방법 외에는 해결책이 없다.
- 적은 파티션으로 운영해보고, 병목 현상이 발생할 때 늘리자!
Offset(오프셋)
각 파티션마다 메시지가 저장되는 위치, 파티션 내에서 유일하고 순차적으로 증가하는 숫자(64비트) 형태로 되어있다.
- 파티션마다 유니크한 값을 가지며 카프카에서 이를 오프셋이라고 한다. 오프셋은 하나의 파티션 내에서만 유일한 숫자이다.
- 카프카에서는 이 오프셋을 이용해 메세지의 순서를 보장한다.
Producer(프로듀서)
메시지를 생산하여 브로커의 토픽 이름으로 보내는 서버 또는 애플리케이션
Consumer(컨슈머)
브로커의 토픽이름으로 저장된 메시지를 가져가는 서버 또는 애플리케이션
🔗 참고 링크
반응형'📖 개발 공부 > kafka' 카테고리의 다른 글
[Kafka] Spring Kafka JSON Batch (0) 2023.03.26 [Kafka] Commit (0) 2023.03.26 [Kafka] reset offset (0) 2023.02.25 [Kafka] Rebalancing (리밸런싱) (0) 2023.01.31 [Kafka] Partition 딥다이브 (0) 2023.01.18