<aside>
1️⃣ Kafka와 그 구성요소
</aside>
-
클러스터(Cluster)
- 정의: 클러스터는 여러 개의 브로커가 연결되어 하나의 단위로 동작하는 Kafka의 물리적 구성이다.
- 예시:
Broker 1
, Broker 2
, **Broker 3
**가 서로 연결되어 하나의 클러스터를 형성할 수 있다.
- 용도:
- 클러스터는 데이터를 분산 저장하고 처리하는 데 사용되며, 로드 밸런싱을 통해 트래픽을 균등하게 분배한다. 그래서 하나의 브로커가 실패하더라도 클러스터 내의 다른 브로커가 그 역할을 대신할 수 있어 높은 가용성을 보장한다.
-
브로커(Broker)
- 정의: 브로커는 Kafka의 서버 인스턴스이다. 하나의 Kafka 클러스터는 여러 개의 브로커로 구성될 수 있다.
- 예시:
Broker 1
, Broker 2
, Broker 3
등이 하나의 Kafka 클러스터를 이룰 수 있다.
- 용도:
- 브로커는 토픽의 파티션을 저장하고, 클러스터 내의 다른 브로커와 데이터를 동기화한다. 이를 통해 높은 가용성과 데이터 내구성을 보장한다.
- Producer API와 Consumer API를 통해 클라이언트와 통신한다.
-
토픽(Topic)
-
정의: 토픽은 Kafka에서 메시지를 분류하는 논리적인 단위이다.
-
예시: 예를 들어, 온라인 쇼핑몰에서는 주문 정보를 **orders
**라는 토픽에, 고객 리뷰를 **reviews
**라는 토픽에 저장할 수 있다.
-
용도:
- 토픽을 통해 관련된 메시지를 그룹화한다.
- 데이터 보존 정책(TTL, 삭제 등)을 설정하여 소비자가 원하는 토픽만 구독할 수 있다.
-
파티션(Partition)
- 정의: 파티션은 토픽을 물리적으로 나누는 단위다. 하나의 토픽은 여러 개의 파티션으로 구성될 수 있다.
- 예시: **
orders
**라는 토픽이 있다면, 이 토픽은 Partition 0
, Partition 1
, Partition 2
등으로 나뉠 수 있다.
- 용도:
- Parallel Processing: 파티션을 사용하면 메시지를 병렬로 처리할 수 있어 성능이 향상된다.
- Message Order: 파티션 내의 메시지는 순서가 유지된다.
- Fast Data Retrieval: 파티션 단위로 데이터가 저장되므로 특정 시점의 데이터를 빠르게 조회할 수 있다.
-
세그먼트(Segment)
- 정의: 세그먼트는 파티션 내의 로그를 더 작은 단위로 나눈 것이다. 각 세그먼트는 일정 크기나 시간이 지나면 "닫히게" 되며, 새로운 세그먼트가 생성된다.
- 예시:
Partition 0
내에는 Segment 0-0
, Segment 0-1
, Segment 0-2
등 여러 세그먼트가 존재할 수 있다.
- 용도:
- 디스크 I/O 최적화: 새로운 데이터를 계속 추가하기만 하면 되므로 디스크 I/O 작업이 효율적이다.
- 데이터 삭제와 컴팩션: 세그먼트 단위로 데이터를 삭제하거나 컴팩션을 수행할 수 있다.
- 빠른 데이터 검색: 세그먼트에는 인덱스가 포함되어 있어, 특정 데이터를 빠르게 찾을 수 있다.
- 메모리 효율성: 세그먼트를 사용하면, 메모리에 로드해야 할 데이터의 크기를 줄일 수 있다.
- 롤링 정책: 세그먼트가 일정 크기나 시간에 도달하면, 새로운 세그먼트가 생성되어 메시지가 그곳에 저장된다.
-
정리
- Cluster > Broker > Topic > Partiton > Segment 순으로 내부로 들어가게 된다.
<aside>
2️⃣ Kafka의 클러스터, 브로커, 토픽, 파티션, 세그먼트에 대한 이해
</aside>
- Kafka 클러스터와 브로커
- Kafka 클러스터는 여러 브로커(Broker)로 구성되어 있다. 이 브로커들은 서로 연결되어 있어, 하나의 브로커가 실패하더라도 다른 브로커가 그 역할을 대신할 수 있다.
- 메시지 저장(Storage)
- 토픽(Topic)
- 특정 토픽의 메시지는 파티션에 저장된다.
- 이 파티션은 어느 하나의 브로커에 속하게 된다.
- 파티션(Partition)
- 예를 들어,
orders
토픽의 메시지가 **Partition 0
**에 저장되면, 이 **Partition 0
**은 **Broker 1
**에 속하게 될 수 있다.
- 세그먼트(Segment)
- 파티션 내에서 메시지는 세그먼트라는 더 작은 단위로 관리된다.
- 세그먼트는 일종의 로그 파일로, 새로운 메시지가 들어올 때마다 해당 세그먼트에 추가된다.
- 세그먼트가 일정 크기에 도달하면, 새로운 세그먼트가 생성되어 메시지가 그곳에 저장된다.
- 파티션 복제(Replication)
- 파티션은 다른 브로커에도 복제될 수 있다.
- 즉, **
Partition 0
**의 복제본이 **Broker 2
**와 **Broker 3
**에도 존재할 수 있다.
- 이렇게 하면 **
Broker 1
**이 실패해도 **Broker 2
**나 **Broker 3
**에서 데이터를 복구할 수 있다.
- ISR(In-Sync Replicas):
- ISR은 리더와 동기화된 상태의 팔로워를 의미한다. ISR에만 존재하는 팔로워가 리더가 실패할 경우 리더로 승격될 수 있다.