카프카 5

CQRS(Command Query Responsibillity Segregation)

CQRS (Command Query Responsibillity Segregation) 패턴 CRUD에서 R(query)와 CUD(command)를 구분하는 방식이다. 읽기전용 DB와 쓰기 전용 DB를 분리해 빠른 읽기를 구현할 수 있다. MSA에서 CQRS 패턴은 높은 성능과 각 마이크로 서비스간 책임의 분리를 위해 사용된다. CQRS는 실제 마이크로 서버들의 운영상태와 관계없이 항상 안정되게 운영되며 원본을 가져오는 것이 아닌 미리 뷰를 구성한다. 만약 각 마이크로서비스를 직접 호출해 결과를 돌려주는 방식으로 뷰를 구성한다면 어떻게 될까. 당연히 데이터를 제공할 수 없게된다. 마이크로서비스 끼리 장애 전파가 일어난다는 이야기이다. 장애 전파를 없애기 위해 MSA를 사용했지만 결국 사용자에게 일부 서비..

카테고리 없음 2024.04.01

카프카(Kafka)를 사용하는 이유

누구나 모놀로식 아키텍처로 개발을 해온 사람이라면 피해갈 수 없는 문제가 있다. 바로 커플링(Coupling)이다. 무수히 많은 로직들이 엉켜 결국 유지보수하는데 많은 시간을 소비해본 경험이 있을 것이다. 카프카를 이용해 DDD패턴으로 설계하면 이와 같은 문제를 해결할 수 있다. 카프카 카프카를 사용하는 주된 목적은 커플링을 줄이기위해 발신자와 수신자를 서로 의존하지 않는 상태로 서비스 아키텍처를 가져가기 위해 사용된다. 기존에는 하나의 소스 시스템에 여러 타겟 시스템이 붙어 수신해야했다. 이 때문에 타겟 시스템별 데이터 수신 차이가 발생했다. 이를 극복하기 위해 소스 시스템을 늘리면 구조가 복잡해지고 각 시스템들 사이의 데이터 포맷과 처리방식이 달라 확장 및 소비에 어려움이 있었다. 이런 문제를 깔끔하..

벡엔드/MSA 2024.03.26

Helm bitnami를 사용한 카프카(kafka) 설치 24.03

버전정보 helm version : v3.14.3 EKS t3.medium 이 글은 M1 pro 칩을 기준으로 작성되었습니다. Helm Helm 은 쿠버네티스 패키지 인스톨러로 EKS에 카프카를 구축하는 방법 중 거의 가장 간단했던 것 같다. 다만 버전에 따라 조금씩 달라지는 부분들이 많아 조금 애를 먹었다. 먼저 Helm을 설치해 주어야 한다. curl -fsSL -o get_helm.sh chmod 700 get_helm.sh ./get_helm.sh helm을 설치하고 권한을 주었다. 해당 코드를 통해 설치가 잘되었는지 확인할 수 있다 helm version bitnami 이제 helm 레포에 bitnami를 추가해주어야 한다. helm repo add bitnami https://charts.bi..

벡엔드/MSA 2024.03.25

EKS에 Helm bitnami 을 이용한 Kafka 구축 중 SASL 에러

기존 코드 # 헬름 설치 curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh # bitnami 추가 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update # 카프카 설치 helm install my-kafka --set volumePermissions.enabled=true 문제 상황 위와 같은 코드를 이용해 EKS에 Helm 을 이용해 카프카를 구축하던 도중 문제가 발생했다. 카프카 Pod들의 Status는 Running이지만 마이크로 서비스를 배..

벡엔드/MSA 2024.03.25

Kafka Scaling 카프카 스케일링

Kafka Scaling 카프카에서 Topic을 생성하면 기본적으로 partition은 1개 생성된다. 이때 카프카에서 하나의 파티션은 반드시 하나의 Consumer가 매칭되어 메시지를 소비하게 되는데 partition 수보다 동일한 GroupId를 가진 Consumer의 수가 더 많다면 일부 Consumer가 partition에 매칭되지 못해 message를 Polling하지 못한다. 주문이벤트가 발행되면 policy에 의해 재고가 감소하는 Inventory 서버가 있다고 가정해보자. cd inventory mvn spring-boot:run // 8082로 실행 cd inventory mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=808..

벡엔드/MSA 2024.03.20