Apache Kafka(아파치 카프카)의 고가용성 및 대규모 데이터 처리방법을 예시를 통해 쉽게 이해해 보자
📌 서론
Kafka는 프로듀서와 컨슈머 간의 원활한 데이터 흐름을 가능하게 하며, 데이터 무결성, 확장성, 높은 가용성을 보장한다. 이번 포스트에서는 Kafka의 복잡한 설계에 초점을 맞추어 파티션 메커니즘, 컨슈머 그룹, 클러스터 구성의 복원력을 살펴보도록 하자. 분산 환경에서 대규모 데이터를 처리하기 위해 Kafka의 내부 작동 원리를 이해하는 것은 정말 중요하다.
시나리오 1: 고가용성을 위한 Kafka 클러스터 구성
토픽 구성: UserActivity
- UserActivity는 사용자 활동 데이터를 위한 Kafka 토픽이다. 이 토픽은 사용자의 다양한 활동을 기록하고 저장하는 데 사용된다.
카프카 브로커, 파티션 구성
- Kafka 클러스터는 Broker A, B, C로 구성된다. 각 브로커는 이 토픽의 파티션들을 관리한다.
- 토픽은 3개의 파티션(Partition 0, 1, 2)으로 나뉘어져 있다. 각 파티션은 사용자 활동 데이터의 부분 집합을 독립적으로 저장하고 관리한다.
Producer, Consumer의 역할
- (Producer) 사용자 활동 데이터를 생성하고 Kafka 토픽 'UserActivity'에 전송한다.
- (Consumer) 처리된 사용자 활동 데이터를 Kafka 토픽에서 읽어 분석하거나 다른 용도로 사용한다.
파티션 할당 메커니즘
- 사용자 ID를 메시지의 키로 사용한다. Kafka는 이 키를 기반으로 메시지를 특정 파티션에 할당하여, 동일한 사용자 ID를 가진 메시지가 항상 같은 파티션에 저장되도록 한다. 이는 메시지 순서의 일관성을 보장한다.
브로커와 파티션 관계
- Kafka 클러스터는 Broker A, B, C로 구성되어 있으며, 각 브로커는 여러 파티션을 관리한다. 각 파티션은 하나의 브로커에서 Leader 역할을 하며, 나머지 브로커에서는 Follower 역할을 한다.
고가용성 구성
- Partition 0의 Leader는 Broker A에 있으며, Broker B와 C에 있는 Partition0은 Follower 역할을 한다.
- Partition 1의 Leader는 Broker B에, Partition 2의 Leader는 Broker C에 위치하며, 각각 나머지 두 브로커안에 있는 partition1, partition2가 Follower 역할을 한다.
- 이 구성은 한 브로커에 장애가 발생하더라도, 다른 브로커가 Leader 역할을 넘겨받아 데이터 손실 없이 서비스를 지속할 수 있게 한다.
장애 대응 및 연속성
- 이러한 구성은 한 브로커에 장애가 발생하더라도, 다른 브로커가 해당 파티션의 Leader 역할을 넘겨받아 데이터 손실 없이 서비스를 지속할 수 있게 한다. 이는 Kafka 시스템의 고가용성과 안정성을 보장하는 중요한 요소다.
시나리오 2: 대규모 데이터 처리를 위한 Kafka 파티셔닝
토픽 구성: WebLogs
- WebLogs는 웹사이트 로그 데이터를 저장하는 토픽으로, 웹사이트의 사용자 활동과 관련된 정보를 포함한다.
브로커 (X, Y, Z), 파티션 (5개) 설정
- 세 개의 브로커(Broker X, Y, Z)는 이 파티션들을 관리하며, 각각의 브로커는 데이터의 복제본을 유지하여 시스템의 안정성과 가용성을 높여준다. 이 토픽은 5개의 파티션(Partition 0 ~ Partition 4)으로 나뉘어 있어, 로그 데이터를 분산 저장하고 관리한다.
Producer, Consumer 역할
- (Producer): 웹사이트 로그 데이터를 생성하고 Kafka 토픽 'WebLogs'에 전송하는 역할을 한다.
- (Consumer): 분석 목적으로 Kafka 토픽에서 로그 데이터를 읽는 역할을 한다.
파티션 할당 메커니즘
- 웹사이트의 각 페이지 ID를 메시지 키로 사용한다. 이는 동일한 페이지의 로그가 같은 파티션에 저장되도록 보장하여 데이터 관리를 효율적으로 만든다.
분산 저장
- 로그 데이터는 페이지 ID에 따라 다른 파티션에 분산 저장된다. 이는 단일 장애 지점(single point of failure)을 방지하고 전체 시스템의 안정성을 높인다.
병렬 처리
- 각 파티션은 독립적으로 데이터를 처리할 수 있다. 이는 한 파티션의 지연이 다른 파티션에 영향을 미치지 않음을 의미한다. 또한, 다수의 Consumer가 서로 다른 파티션에서 데이터를 동시에 읽을 수 있어, 시스템 전체의 처리량이 증가한다.
Leader 파티션과 Follower 파티션의 역할
- (Leader) 데이터 쓰기 및 읽기 연산을 담당한다. Producer로부터 데이터를 받고 Consumer에게 데이터를 제공한다.
- (Follower) Leader 파티션의 데이터를 복제하여 시스템의 내구성을 강화한다. Leader 파티션에 문제가 발생하면, Follower 중 하나가 Leader로 승격되어 데이터 손실 없이 서비스를 계속한다.
📌 결론
Kafka의 이러한 구조는 데이터의 안정성과 시스템의 가용성을 높이는 핵심 요소다. Follower 파티션은 데이터 처리에 직접적으로 관여하지 않지만, 시스템의 내구성과 장애 대응 능력을 강화한다. 결과적으로, Kafka는 대규모 데이터를 효율적으로 처리할 수 있는 강력한 분산 메시징 시스템으로서의 역할을 충실히 수행한다.
3. 파티션의 독립적 처리
병렬 처리의 중요성
- Kafka 시스템에서는 하나의 토픽이 여러 파티션으로 나뉘어 있다. 이 각각의 파티션은 독립적으로 데이터를 처리할 수 있는 능력을 가졌다. 이런 구조 덕분에 Kafka는 높은 수준의 병렬 처리를 실현할 수 있는 것이다.
- 각 파티션은 자체적으로 데이터를 처리하기 때문에, 하나의 토픽 안에서도 동시에 여러 데이터 처리 작업이 이루어질 수 있다. 이것은 전체 시스템의 처리량을 대폭 향상시켜준다.
컨슈머 그룹과 동시 접근
- Kafka의 또 다른 중요한 특징은 컨슈머 그룹을 사용할 수 있다는 것이다. 컨슈머 그룹 내의 여러 컨슈머는 서로 다른 파티션에서 데이터를 동시에 읽을 수 있다. Kafka는 여러 컨슈머가 동시에 작업을 수행할 수 있도록 지원해 줘서 데이터 처리의 효율성을 높여준다.
- 예를 들어, 한 컨슈머 그룹 내에서 각기 다른 컨슈머가 다른 파티션에서 데이터를 읽고 처리함으로써, 전체 시스템의 병렬 처리 능력이 증가한다. (컨슈머 그룹도 Leader 파티션으로부터 데이터를 읽고 처리한다.)
파티션 독립성의 이점
- 각 파티션의 독립적인 작동 방식은 Kafka 시스템의 성능과 안정성에 큰 이점을 제공한다. 한 파티션에서 발생하는 지연이나 문제가 다른 파티션에 영향을 미치지 않기 때문에, 시스템 전체의 안정성이 유지된다.
- 또한, 필요에 따라 새로운 파티션을 추가함으로써 시스템의 처리 능력을 쉽게 확장할 수 있다. 이는 특히 대규모 데이터를 처리하는 환경에서 매우 중요한 요소다.
📌 결론
Kafka의 이러한 파티션 기반의 구조는 토픽 전체의 처리량을 증가시키는 핵심 요소로 작용한다. 이를 통해 Kafka는 대규모 데이터를 효율적으로 처리할 수 있는 강력한 분산 메시징 시스템으로서의 역할을 수행한다. Kafka의 여러 파티션을 통한 데이터 처리는 시스템의 병렬 처리 능력을 크게 향상시키며, 이는 Kafka가 제공하는 가장 중요한 장점 중 하나다.
다음 포스트에서 카프카의 메시지 포맷을 알아보자👇🏻👇🏻
'유용한 개발지식 > Apache Kafka' 카테고리의 다른 글
[Kafka] Docker로 Kafka 세팅하기 (Kraft 방식, M1 Mac) (2) | 2024.02.17 |
---|---|
Kafka(카프카) 메시지 포맷(message format)의 구조와 특징 이해하기 (21) | 2023.12.27 |
Kafka(카프카) Producer(프로듀서)와 Consumer(컨슈머)의 동작 원리와 고가용성 (1) | 2023.12.27 |
Kafka(카프카) 파티션(partition) 쉽게 이해하기 (3) | 2023.12.27 |
Kafka(카프카) 클러스터와 브로커의 동작 이해하기 (1) | 2023.12.27 |