티스토리 뷰
[Cloud]Java 17 + WebFlux 환경에 AWS MSK 도입하기(1) - MSK?
Vagabund.Gni 2023. 8. 1. 15:12목차
Apache Kafka
아파치 카프카는 그 유명한 링크드인에서 개발해 11년에 공개한 오픈소스 메시지 브로커 프로젝트이다.
Message Broker
오픈소스는 그렇다 치고 메시지 브로커라는 단어를 처음 보니 정리하고 지나가자면,
브로커라는 단어 뜻 그대로 프로그램 간의 메시지를 전달하는 중개인 역할을 하는 앱이라고 생각하면 된다.
출처: https://www.g2.com/articles/message-broker
특히 카프카는 복잡한 시스템에서 컴포넌트 간의 통신을 담당하며, 이 과정에서
컴포넌트들이 직접 통신하는 대신 카프카를 통해 메시지, 즉 요청과 응답을 주고받는다.
이를 통해 시스템은 컴포넌트 사이의 결합도를 낮추는 동시에, 확장성과 유연성을 동시에 높일 수 있게 된다.
Key Features
카프카의 주요 특징을 짧게 요약하면 다음과 같다.
- 분산처리
이후에 보게 되겠지만 카프카는 클러스터를 구성해 대량의 메시지를 분산 처리할 수 있다.
각 카프카 노드는 하나 이상의 파티션으로 나뉜 토픽을 관리하는데, 여기서 토픽이란 메시지(레코드)의 집합이다. - 확장성
위와 같은 특징 덕분에 클러스터의 노드 추가 혹은 제거가 간단하며, 트래픽에 따른 확장성이 뛰어나다. - 실시간 처리
카프카는 데이터를 실시간으로 생산(Produce) 및 소비(Consume)한다. 이런 특징을 이용해
실시간 분석 및 통계, 모니터링, 알림 서비스 등의 실시간 앱을 쉽게 구현할 수 있다. - 내구성
카프카는 메시지를 디스크에 기록하며, 이를 노드 간에 복제해 시스템 장애 시 데이터 손실 위험을 최소화한다.
메시지는 설정된 기간 동안 보존되며, 리더 노드가 실패하면 복제본을 가진 다른 노드가 리더 역할을 수행한다.
따라서 카프카는 실시간 처리가 중요한 스트리밍 파이프라인, 실시간 분석, 로그 수집, 분산 시스템 간의 통신에 사용되며
규모가 큰 프로젝트일수록 그 효용성이 빛난다.
Key Components
이어서 카프카를 구성하는 주요 컴포넌트에 대해 간결하게 정리하자.
- Producer
메시지를 생성하고 카프카에 전송하는 클라이언트 애플리케이션 - Consumer
카프카에서 메시지를 읽어 처리하는 클라이언트 애플리케이션 - Broker
카프카 클러스터를 구성하는 각 노드. 브로커는 토픽의 메시지를 저장 및 관리한다. - Topic
메시지의 집합. 메시지의 카테고리, 혹은 유형을 표현하는 개념.
프로듀서는 토픽에 메시지를 쓰고, 컨슈머는 토픽에서 메시지를 읽는다. - Partition
하나의 토픽을 나누는 데이터의 조각이자 일종의 데이터 구조. 한 토픽 내에서 데이터는 여러 파티션에 나누어 저장되며,
각 파티션은 독립적으로 메시지를 읽고 쓸 수 있기 때문에 병렬처리가 가능해진다.
또한 파티션은 작업의 순서를 보장하는 역할도 하기 때문에, 카프카는 이를 이용해 높은 처리량과 확장성을 확보할 수 있다.
이어서 파티션은 여러 클러스터 내의 여러 브로커에 분산될 수 있기 때문에, 시스템의 내구성을 강화하기도 한다.
AWS MSK(Managed Streaming for Apache Kafka)
AWS MSK는 한 마디로 말하자면 아파치 카프카의 관리형 서비스이다.
카프카의 분산 스트리밍 기능을 그대로 활용하면서 AWS의 안정성, 확장성, 보안성을 보장하는 서비스라고 할 수 있다.
이를 통해 개발자는 클러스터의 세세한 설정이나 구현, 운영, 유지보수에 신경 쓸 필요 없이
애플리케이션의 로그, 이벤트, 트랜잭션 등을 실시간으로 처리, 분석하며 클러스터를 생성해 메시지 브로커로 쉽게 사용할 수 있다.
그러니까 굳이 다시 요약하자면, 구축과 유지보수가 복잡한 카프카 클러스터를 완전히 관리해주는 서비스라고 보면 된다.
장점으로는 위에서 언급한 간편함, 확장성, 내구성, 고가용성, 보안, 모니터링, 로깅, 호환성 등이 있지만 생략한다.
카프카와 MSK에 대한 대략적인 설명은 끝난 것 같으니, 다음 글에선 바로 클러스터를 생성해 보기로 한다.
추가로 MSK는 아직 리액티브 프로그래밍을 지원하지 않기 때문에, 웹플럭스 환경에서는 한 단계가 더 필요하다.
이 부분까지 기초적인 구현을 하는 것을 이 타래의 목표로 삼겠다.
일단 이번 글은 끝!
'Development > Cloud' 카테고리의 다른 글
[Kafka]Avro에 대해서 (0) | 2023.09.15 |
---|---|
[Kafka]Java 17 + WebFlux + Docker 환경에서 카프카 실습 (2) (0) | 2023.09.06 |
[Kafka]Java 17 + WebFlux + Docker 환경에서 카프카 실습 (1) (0) | 2023.08.31 |
[Trouble Shooting]AWS 타임아웃 설정 (0) | 2023.07.11 |
[Jenkins+Docker]두 대의 EC2로 CI/CD 구현하기(3/3) (0) | 2023.07.04 |
[Jenkins+Docker]두 대의 EC2로 CI/CD 구현하기(2/3) (0) | 2023.07.01 |
- Total
- Today
- Yesterday
- 스프링
- RX100M5
- 알고리즘
- 스트림
- 맛집
- 유럽
- 세계여행
- BOJ
- 칼이사
- 기술면접
- Python
- 파이썬
- 야경
- 백준
- java
- 리스트
- Algorithm
- 세계일주
- 동적계획법
- 자바
- 유럽여행
- a6000
- 중남미
- 여행
- 세모
- 지지
- 남미
- Backjoon
- spring
- 면접 준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |