0. Message Broker
메시지 브로커는
서로 다른 애플리케이션(또는 시스템) 간 통신 및 데이터 교환을 촉진하는 중개 소프트웨어 구성 요소입니다.
메시지 브로커를 통해
데이터를 수신하는 소비자 애플리케이션과 생성자 애플리케이션을 분리할 수 있습니다.
생산자가 소비자에게 효율적, 안정적으로 전달되도록 보장하는 중재자 역할을 합니다.
메시지 브로커의 주요 특징은
0.1 디커플링 Decoupling
애플리케이션 간의 결합을 해제(디커플링 - Decoupling)할 수 있다는 것입니다.
이를 통해 애플리케이션이 서로의 존재를 인식할 필요 없이 통신할 수 있으며,
애플리케이션 간의 느슨한 결합을 가능하게합니다.
컴포넌트 독립성 및 유연성
생산자와 소비자가 서로 독립적으로 동작할 수 있습니다.
생산자는 메시지를 브로커에 보낸 후,
소비자가 해당 메시지를 언제 수신하고 처리하는지에 대해 신경 쓸 필요가 없습니다.
각 컴포넌트가 독립적으로 개발, 배포 및 유지보수될 수 있게 합니다.
확장성
생산자와 소비자를 독립적으로 확장할 수 있습니다.
특정 서비스의 트래픽이 증가할 경우 그 서비스만 확장하여 처리량을 늘릴 수 있습니다.
이는 자원을 효율족으로 사용하게 하여 비용 절감과 성능 최적화에 기여합니다.
재사용성
독립된 컴포넌트는 다른 애플리케이션에서도 재사용될 수 있습니다.
이는 코드 중복을 줄이고 개발 효율성을 높이는 데 도움이 됩니다.
0.2 비동기 통신 Async
메시지 브로커가 비동기 통신을 지원하여,
생산자와 소비자가 서로 독립적으로 작동할 수 있게합니다.
시간적 독립성
시스템의 각 컴포넌트가 독립적으로 동작하며, 메시지의 수신 및 처리 시간에 구애받지 않게 됩니다.
생산자가 메시지 브로커에 메시지를 보내는 즉시 처리를 완료한 것으로 할 수 있습니다. 소비자가 언제 수신하고 처리할지는 별도로 관리됩니다.
가용성 독립성
생산자가 메시지를 보낼 때, 소비자가 반드시 가동 중일 필요가 없습니다.소비자가 가동 중이 아닐 경우 메시지는 브로커에 저장되어,
소비자가 가동될 때 처리됩니다.
처리량 향상
소비자가 메시지를 병렬로 처리할 수 있어 전체 처리량을 크게 향상시킬 수 있습니다.
높은 트래픽을 효율적으로 처리하는 데 매우 유용합니다.
자원 효율성
시스템의 각 부분이 필요할 때만 자원을 소비하게 되어,
전체적으로 자원 사용의 효율성을 극대화할 수 있습니다.
비용 절감 및 성능 최적화에 기여합니다.
1. Apache Kafka
1.1 Kafka는?
아파치 카프카는 분산된 내결함성 및 확정성이 뛰어난 메시지 브로커이자 이벤트 스트리밍 플랫폼입니다.
원래 Linkedin에서 개발되었고, 이후 아파치 소프트웨어 재단 프로젝트로 오픈소스화 되었습니다.
대량의 데이터 스트림을 실시간으로 내결함성 있게 처리하도록 설계되었습니다.
1.1.1 이벤트 스트리밍
실시간 데이터 처리를 위한 기술로,
데이터를 실시간으로 캡처, 저장, 처리, 전달하는 것을 의미합니다.
데이터가 연속적인 흐름, 스트림 형태로 처리되며,
이를 통해 빠른 데이터 처리가 가능합니다.
1.1.2 Apache Kafka와 이벤트 스트리밍
Kafka는 이벤트 스트리밍을 구현할 수 있는 세 가지 주요 기능을 제공합니다.
a. 이벤트 스트림을 게시(쓰기)하고 구독(읽기)할 수 있으며,
다른 시스템에서 데이터를 지속적으로 가져오고 내보냅니다.
b. 이벤트 스트림을 원하는 기간 동안 영구적이고 안정적으로 저장합니다.
c. 이벤트 스트림을 실시간으로 또는 회고적으로 처리합니다.
Kafka는 온프레미스, 클라우드, 컨테이너 등 여러 환경에서 배포할 수 있습니다.
1.1.3 Kafka 서버 - 클라이언트 작동
서버
Kafka는 여러 데이터 센터 또는 클라우드 지역에 걸쳐 하나 이상의 서버 클러스터로 실행됩니다.
일부 서버는 저장 레이어(브로커)를 형성합니다.
다른 서버는 Kafka Connect를 실행하여 RDBMS 및 다른 시스템과 통합하기 위해,
이벤트 스트림을 지속적으로 가져오고 내보냅니다.
클라이언트
분산 애플리케이션 및 마이크로 서비스를 작성하여,
이벤트 스트림을 병렬로 읽거나 쓰도록 처리할 수 있습니다.
다양한 프로그래밍 언어 및 REST API에 대한 클라이언트가 제공됩니다.
1.2 Kafka의 주요 특징은
1.2.1 분산 시스템
카프카는 여러 노드로 구성된 클러스터에서 작동하며,
데이터와 작업을 분산시켜 높은 가용성과 확장성을 제공합니다.
높은 처리량을 가집니다.
1.2.2 내구성
데이터 복제를 통해 노드에 장애가 발생하더라도 데이터 손실 없이 시스템이 계속 동작할 수 있습니다.
처리 후 일정 기간 동안 데이터가 남아 있어 필요시 활용할 수 있습니다.
1.2.3 실시간 처리
데이터를 실시간으로 스트리밍하여 빠르게 처리하고 분석할 수 있습니다.
낮은 대기시간을 가집니다.
1.2.4 확장성
필요에 따라 클러스터에 노드를 추가하여 처리 용량을 쉽게 확장할 수 있습니다.
1.3 Kafka 구성 요소
kafka의 주 구성요소는 다음과 같습니다.
1.3.1 Producer 생산자, Consumer 소비자
Producer는 데이터를 생성하여 특정 topic에 게시합니다(메시지를 보냅니다).
Producer는 데이터를 다양한 형식으로 데이터를 생성하고,
이를 Kafka의 특정 Topic에 비동기 방식으로 전송합니다.
데이터는 여러 Partition에 분산 저장됩니다.
Customer는 특정 topic을 구독하고, Broker로부터 메시지를 받아 처리합니다.
Consumer는 메시지를 처리하여 DB에 저장하고너 다른 시스템으로 전달하는 등의 후속 작업을 합니다.
Consumer 그룹을 활용하여 메시지를 병렬로 처리할 수 있습니다.
Producer는 여러 파티션에 데이터를 동시에 쓸 수 있습니다.
Consumer도 여러 파티션으로부터 동시에 데이터를 읽을 수 있습니다.
1.3.2 Kafka Cluster
Kafka Cluster는 여러 Broker(Server)로 구성된 그룹입니다.
카프카 클러스터를 여러 개의 Broker로 구성하는 이유는 아래와 같습니다.
속도(낮은 지연 시간)
여러 Broker가 동시에 데이터를 처리하므로 고속의 데이터 전송이 가능합니다.
내구성
데이터가 여러 서버에 복제되어 저장되므로 한 서버에 장애가 발생해도 다른 서버에 백업된 데이터로 복구할 수 있습니다.
확장성
데이터를 여러 Broker에 분산시킴으로써 대규모 데이터 처리 및 시스템 확장이 용이합니다.
1.3.3 Kafka Broker
Broker는 Producer로부터 받은 메시지(스트림)를 저장하고,
Consumer에게 전달하는 중개 역할을 합니다.
각 Broker는 특정 파티션의 데이터를 저장하고,
로드밸랜싱, 복제를 담당하여 데이터의 일관성과 가용성을 보장합니다.
1.3.4 Topic 주제
메시지가 게시되는 논리적인 채널입니다.
Producer는 데이터를 특정 Topic에 게시하고,
Costomer는 해당 topic을 구독하여 메시지를 수신합니다.
Topic은 여러 partition으로 나뉘어 데이터를 분산 저장합니다.
1.3.5 Partition 파티션
Partition은 Topic을 여러 부분으로 나눈 것입니다.
각 Partition은 데이터를 독립적으로 저장하고 처리할 수 있으며, 이를 통해 병렬 처리가 가능합니다.
Producer와 Customer는 서로 다른 파티션에서 동시에 데이터를 쓸 수 있고 읽을 수 있습니다.
1.3.6 ZooKeeper
Zookeeper는 Kafka Broker의 분산 조정 및 관리를 진행합니다.
Zookeeper는 Kafka Cluster의 메타데이터를 관리하고, Broker 간의 상태를 조정하는 역할을 합니다.
Zookeeper는 클러스터 구성원의 정보를 저장하고, 리더 선출 등의 작업을 담당합니다.
참고
'Dictionary' 카테고리의 다른 글
[Web, WS, WAS] 웹(Web) 기본 개념 (0) | 2024.08.31 |
---|---|
[Dictionary] Computer Network, 컴퓨터 네트워크 (1) | 2024.06.20 |
[GitHubFlow] 형상관리 전략 GitHubFlow (2) | 2024.01.16 |
Shebang #! (0) | 2024.01.11 |
Session vs Request Scopes (0) | 2024.01.06 |