분류 전체보기 36

Gpt와 함께하는 Kafka & Redis 활용 프로젝트 기획서

Kafka & Redis 활용 미니 프로젝트 기획서🎯 프로젝트 개요: 실시간 이벤트 기반 주문 처리 시스템핵심 컨셉전자상거래 플랫폼의 실시간 주문 처리 및 재고 관리 시스템대용량 주문 트래픽 처리실시간 재고 업데이트이벤트 기반 아키텍처캐싱을 통한 성능 최적화🏗️ 시스템 아키텍처핵심 컴포넌트Order Service (주문 접수)Inventory Service (재고 관리)Notification Service (알림 처리)Analytics Service (실시간 분석)기술 스택 활용Kafka: 이벤트 스트리밍, 서비스 간 비동기 통신Redis: 세션 관리, 재고 캐싱, 실시간 랭킹Spring Boot: 마이크로서비스 구현PostgreSQL: 주문/상품 데이터 영속성📋 상세 기능 명세1. 주문 처리 플로..

[실습] Kafka CDC 이벤트를 이용한 Pub/sub 예제

이벤트 발생에 따른 CDC 를 처리하려고 합니다.1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/g 호출)2. Service 설정3. ServiceImpl 설정MyModel 객체를 받아 이를 JPA가 처리할 수 있는 MyEntity 객체로 변환합니다.변환된 MyEntity 객체를 JPA 저장소에 저장합니다.저장된 결과를 다시 MyModel로 변환한 후 반환합니다. (kafka로 보낼 것) 트랜잭션과 비슷하게 이벤트로 처리할 경우카프카로 메세지 보내기전에 오류가 발생할 경우 데이터는 커밋되는데 메세지를 구현하지 못하는 문제가 발생한다.이벤트 처리로 인한 것도 완벽한 CDC 구현이 될 수 없다. 4. Repository 설정 5. ..

인프라/Kafaka 2024.12.12

[실습] Kafka CDC 트랜잭션을 이용한 Pub/sub 예제

트랜잭션을 활용하여 CDC 를 처리하려고 합니다.트랜잭션을 잘 사용하면 데이터 처리에 용이하지만 트랜잭션의 묶여있는 순서에 따라 결과가 달라질 수 있으니잘 보고 사용해야합니다.1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/f 호출)2. Service 설정3. ServiceImpl 설정MyModel 객체를 받아 이를 JPA가 처리할 수 있는 MyEntity 객체로 변환합니다.변환된 MyEntity 객체를 JPA 저장소에 저장합니다.저장된 결과를 다시 MyModel로 변환한 후 반환합니다. (kafka로 보낼 것) 단, 위와 같이 throw 를 제일 아래에 작성해 주었을 경우는 결과가 달라진다.트랜잭션으로 묶은 이유는 에러 발생 ..

인프라/Kafaka 2024.12.12

[실습] Kafka CDC 객체 리스너 Pub/sub 예제

카프카 메시지를 주고 어떻게 주고 받는지는 여러가지 방식들이 있겠지만 몇가지에 대해 사전에 알아봤다.사실 메세지만 주고 받는 샘플을 가지고는 실무에서 어떻게 쓰는지 와닿지가 않아서 DB 사용하는 환경에서의테스트를 해봤다. 카프카와 JPA를 가지고 데이터 생성 시 리스너를 통해 메세지 PUB/SUB 해보려고 한다. 1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/e 호출) 카프카와 JPA(MYSQL) 환경에서 리스너를 활용한 카프카 메세지 PUB/SUB 테스트를 해봤다.Request 객체에 데이터를 전달 받고  MyModel에 전달 받은 데이터를 담아 Db에 저장할 수 있게 service 단으로 보냈다.이 때 MyModel은 정적..

인프라/Kafaka 2024.12.12

[실습] Kafka 수동 커밋 구현(리밸런싱)

카프카에서 중복 컨슘이 발생하거나 컨슘 데이터 손실이 발생하는 경우가 있다.가장 큰 이유가 리밸런싱에 의한 발생 원인을 들 수 있다.그래서 전략 적으로 수동 커밋을 통한 리밸런싱을 컨트롤 해보려고 한다.자동 커밋 설정은 편리하지만 컨슈머 그룹의 리밸런싱이 발생할 때 메시지의 중복 처리나 유실 문제가 발생할 수 있다. 1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/d/{key} 호출)2. Producer 설정 실습할 때마다 Procuder 템플릿을 만들어 줄 수 없어서 직렬화 테스트 했던 템플릿으로 불러와서 사용String, String 구조로 전송할 것이지 떄문에 사용 3.Consumer  4.config 수동 커밋 설정 값 ..

인프라/Kafaka 2024.12.12

[실습] Kafka 객체를 JSON 문자열로 직렬화 구현

writeValueAsString는 JSON 문자열로 데이터를 직렬화하는 매우 편리한 메서드입니다. Kafka 메시지, REST API 응답 데이터, 로그 데이터 등 JSON 형식이 필요한 모든 곳에서 사용할 수 있습니다.  1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/c 호출) 2. Producer 설정 3.Consumer  4.config컨슈머에서 한번에 받기 위해서는 consumer 셋팅에 배치 리스너 설정 값을 변경 해줘야 한다.factory.setBatchListener(true);  5. 결과

인프라/Kafaka 2024.12.11

[실습] Kafka 배치 메세지 리스너 pub/sub 단순 구현

배치 메세지 리스너 구현 실습 내용이다.배치 메세지 리스너를 구현하고 한번에 메세지가 처리된다고 했는데 왜 컨슈머에서 메세지가 쪼개지지? 하고 의문이 들었었다. Kafka에서 배치 리스너를 사용하는 경우에도, Kafka의 기본 동작인 파티셔닝은 여전히 적용됩니다. 배치 리스너가 메시지를 처리할 때, 여러 파티션에서 가져온 메시지를 한 번에 전달받을 수 있습니다.  위와 같이 배치 리스너라고 해도 파티셔닝 기본 동작은 유지한 채로 읽어온다고 한다.결국 전체 메세지를 컨슈머에서 다 소비하긴 한다.  1. @RestController 생성    MyController에서 앞으로 url 호출 예정 (post: /message/b 호출) 얘는 메세지만 한번에 받는 것 테스트 하느라 호출만 하면 처리 된다. 2. ..

인프라/Kafaka 2024.12.11

kafka의 EOS란 무엇인가

Kafka에서 EOS (Exactly-Once Semantics)는 메시지 처리의 정확히 한 번 보장(Exactly Once Guarantee)을 의미합니다. 이는 Kafka에서 메시지의 송수신 및 처리가 중복 없이 정확히 한 번 이루어지도록 보장하는 기능입니다.기본적으로 메시징 시스템에서 세 가지 전송 보장 수준이 제공됩니다:At Most Once: 메시지가 한 번 이하로 전달됩니다. (유실 가능성 있음)At Least Once: 메시지가 적어도 한 번 전달됩니다. (중복 가능성 있음)Exactly Once: 메시지가 정확히 한 번 전달됩니다. (가장 엄격한 보장)Kafka는 기본적으로 At Least Once 전달 보장을 제공하지만, 추가 설정을 통해 Exactly Once Semantics (EOS..

인프라/Kafaka 2024.12.10

Kafka 중복 컨슘이 발생하는 이유 (rebalance)

카프카에서 중복 컨슘이 발생하거나 컨슘 데이터 손실이 발생하는 경우가 있다.이 경우 중에서 원인 되는 가장 큰 이유가 리밸런스가 발생할 경우 일어 날 수 있다.리밸런스란 언제 발생하고 그러면 중복/누락 컨슘을 방지하려면 어떻게 해야 하는지에 대해 알아 본다. Apache Kafka에서 rebalance(리밸런스)는 컨슈머 그룹이 파티션을 재할당하는 과정입니다.이는 Kafka가 데이터를 효율적으로 처리하기 위해 자동으로 수행하는 작업으로, 다음과 같은 상황에서 발생합니다.1. 리밸런스가 발생하는 이유리밸런스는 다음과 같은 이유로 트리거됩니다:컨슈머 추가새로운 컨슈머가 컨슈머 그룹에 추가되면, 기존 컨슈머가 처리하던 파티션 중 일부를 새로운 컨슈머로 재할당합니다.컨슈머 제거컨슈머 그룹에서 컨슈머가 중단되거나..

인프라/Kafaka 2024.12.09