카프카 게시글
1. Kafka의 구성요소
[기본 작동 방식]
- Producer는 새 메시지를 Kafka에 전달
- 전달된 메시지는 Broker의 Topic이라는 메시지 구분자에 저장
- Consumer는 구독한 Topic에 접근하여 메시지를 가져옴
1. Producer(프로듀서)
- 메시지를 만들어서 카프카 클러스터에 적재
- key값 지정하여 특정 파티션으로만 전송 가능
2. Kafka Cluster(카프카 클러스터)
- 카프카 서버로 이루어진 클러스터
[카프카 클러스터의 구성요소]
2.1 Broker(브로커)
- 카프카 서버
- Producer와 Consumer사이의 발행된 메시지를 저장하고 구독할 수 있게 해주는 중계 역할
- 페이지 캐시 사용하여 데이터 입출력 속도 보완
2.2 ZooKeeper(주키퍼)
- 분산 애플리케이션 관리를 위한 코디네이션 시스템
- 메타데이터 관리 및 브로커의 상태정보 확인
- 카프카 클러스터의 Leader 선택 기능 제공
메타데이터 : 데이터에 관한 구조화된 데이터. 즉, 타 데이터를 설명해주는 데이터)
2.3 Topic(토픽)
- 카프카 클러스터에 데이터 관리 간 기준이 되는 개념 : 다수의 프로듀서 및 컨슈머가 동일한 카프카 사용 시 토픽으로 구분
- 카프카 클러스터 내 다수의 토픽 생성 가능
- 토픽 생성 시 1개 이상의 파티션으로 구성(파티션 개수 지정 가능)
2.4 Partition(파티션)
- 병렬 처리 및 고성능을 위해 하나의 토픽을 여러 개로 나눈 것
- 파티션 개수 추가만 가능 : 개수 감소 불가
- 파티션 개수 1개 시 전 메시지 순서 보장
- 파티션의 개수가 증가할수록 효율성(처리량) / 관리 포인트 및 장애 복구 시간 증가 : 처리속도 불충분 시 개수 증가 조치 요망
- 파티션 내 각 메시지는 Offset(고유 번호)로 구분
- 파티션 수만큼 컨슈머 연결 가능
[파티션의 종류]
2.4.1 Leader Partition(리더)
- 모든 읽기, 쓰기 연산을 담당
- 프로듀서, 컨슈머와 직접적으로 테이터를 통신하는 파티션
2.4.2 Follower Partition(팔로워)
- 리더의 데이터를 단순 복사(복제, Replication)하는 역할
- 리더의 오프셋과 자신의 오프셋을 비교하여 다를 경우 리더의 데이터를 가져와서 자신의 파티션에 저장
3. Consumer Group(컨슈머 그룹)
- 컨슈머의 집합을 구성하는 단위
- 메시지를 가진 각 파티션에 대해 Offset 값 할당받음
- 컨슈머 수만큼 파티션의 데이터를 분산 처리함
- 한 개의 토픽을 소비하기 위해 같은 그룹의 여러 컨슈머가 함께 동작
- 컨슈머 그룹 내 컨슈머는 파티션의 개수보다 적거나 같아야 자원의 낭비 방지 가능
[컨슈머 그룹의 구성요소]
3.1 Consumer(컨슈머)
- 브로커의 Topic 이름으로 저장된 메시지를 가져오는 서버 또는 애플리케이션
- 한 개의 토픽의 각 파티션은 하나의 컨슈머만 소비 가능
- 컨슈머는 여러 대의 파티션으로부터 데이터 수용 가능
- 파티션 소유권(Ownership) : 각 컨슈머가 각 파티션에 대응되는 것
[설명]
프로듀서가 데이터를 카프카에 적재하고 있으며 그 저장된 데이터를 컨슈머그룹 A, B 각각 처리해야 될 Topic(Foo, Bar)을 가져오는 그림입니다.
Foo와 Bar은 각각 3개의 파티션으로 나뉘어 있고, 각각의 파티션들은 3개의 복제본으로 복제됩니다. 복제본 중 하나의 리더가 선출(하늘색)되고, 리더가 모든 데이터의 읽기, 쓰기 연산을 담당합니다.
이때 중요한 것은 이 파티션들은 운영 도중 그 수를 늘릴 수 있지만 절대 줄일 수 없습니다. 그래서 파티션을 늘리는 것은 신중하게 결정해야 합니다.
카프카 클러스터에서 컨슈머 그룹 단위로 데이터를 가져옵니다.
각 컨슈머 그룹은 자신이 가져와야 하는 토픽 내 파티션의 데이터를 받게 됩니다.
각 컨슈머 그룹의 컨슈머 내 파티션 수만큼 데이터를 처리하게 됩니다.
2. Kafka 연산 방식
아파치 카프카에서의 연산(읽기, 쓰기)은 카프카 클러스터 내 리더 파티션에게만 적용됩니다.
프로듀서가 리더파티션에게 쓰기 연산을 진행하고 이후 업데이트된 데이터는 각 파티션들의 복제본들에게로 복사됩니다.
프로듀서가 각 파티션에 Write 연산을 진행하는 그림입니다. 카프카는 데이터를 순차적으로 디스크에 저장합니다. 따라서, 프로듀서는 순차적으로 저장된 데이터 뒤에 append 형식으로 Write 연산을 수행하게 됩니다. 이때 파티션들은 오프셋(Offset, 각 데이터들의 순차적인 집합)으로 구성되어 있습니다.
컨슈머그룹의 각 컨슈머들은 파티션의 오프셋을 기준으로 데이터를 순차적으로 처리합니다. 이 때 컨슈머들은 컨슈머 그룹으로 나뉘어서 데이터를 분산 처리하게 됩니다.
한 컨슈머 그룹 내에 있는 컨슈머끼리 같은 파티션 데이터를 처리할 수 없습니다.
파티션 내 데이터들은 순차적으로 저장되며, 이 데이터들은 설정값에 따라 디스크에 보관하게 됩니다.(2.x 기준 default 7일)
컨슈머 그룹 내 컨슈머들은 각각의 파티션의 데이터를 처리합니다.
컨슈머와 파티션의 개수가 같다면 컨슈머는 각 파티션을 1:1로 맡게 됩니다. 그리고 컨슈머의 개수가 파티션의 개수보다 적을 경우 컨슈머 중 하나가 남는 파티션의 데이터를 처리하게 됩니다.
만일 컨슈머의 개수가 파티션의 개수보다 많을 경우 남는 컨슈머는 파티션이 개수가 많아질 때까지 대기하게 됩니다.
3. Kafka 관련 용어
3.1 Offset(오프셋)
- 파티션 내 메시지의 위치를 표시하는 값
- 컨슈머는 오프셋 값으로 메시지를 어디까지 읽었는 지 관리
3.2 Replication(복제)
- 각 메시지들을 다수 복제하여 카프카 클러스터 내 브로커들에 분산시키는 것.
- 파티션 복제 가능 개수 : 1 ~ 브로커의 개수
- 리더파티션의 오프셋과 자신의 오프셋을 비교해 다를 경우 리더의 데이터를 가져와 자신의 파티션에 저장하는 과정
3.3 ISR(In Sync Replica)
- 데이터의 정합성(상호 모순 없이 일관되게 일치해야 한다는 의미) 유지 목적으로 등장
- 리더가 있는 브로커에 장애 발생 시 ISR 구성원 내 다른 팔로워로 새 리더 지정 가능
- ISR 그룹 내 리더는 팔로워들이 주기적으로 데이터를 확인하는 지 체크함
3.4 Rebalancing(리밸런싱)
- 컨슈머 그룹 내 소유권 이관 기능 : 컨슈머 그룹 내 컨슈머들은 본인 파티션의 소유권 공유 가능 :
- 하나의 컨슈머 그룹에서 컨슈머1이 담당하던 파티션 작업을 컨슈머2가 이관받아 처리가능
- 단점 : 리밸런싱 발생한 모든 컨슈머의 Reading 작업이 중단 : 일시적 서비스 중단 발생 가능
[출처]
https://engkimbs.tistory.com/691
https://jaehoney.tistory.com/197
https://log-laboratory.tistory.com/234
'초보 개발자의 스터디룸' 카테고리의 다른 글
[Kafka] 아파치 카프카란? 2. 개요, 사용 이유, 데이터 모델 (0) | 2023.01.06 |
---|---|
[Elastic Search] 엘라스틱서치란? 1. 관련 용어 정리, 특징 (0) | 2023.01.05 |
[GitHub] 이클립스 깃허브 연동 (0) | 2022.12.10 |
[Mac M1] 소소한 맥북 무료 앱 추천(AltTab, Hidden Bar 등) (0) | 2022.12.08 |
[Java] 오름차순과 내림차순(sort, reverseOrder, reverse) (0) | 2022.12.04 |