[Kafka] Spring에서는 Kafka가 실제로 어떻게 동작할까?
·
Backend/Kafka
Kafka를 사용하면서 나는 Kafka에 대한 설정 값들 세팅을 application.yaml 파일에 넣었다 하지만 다른 블로그들을 참고해보니 설정 파일들을 KafkaConfig.java 파일로 따로 관리를 하는것을 보았다. 해당 글들을 보며 궁금해진 의문증은 총 2개였다. consumer가 broaker에 연결을 맺어 메시지를 주고 소비할 수 있는데 이것이 어떻게 구현이 되어 있고 실제로 어떻게 동작할까?yaml 파일로도 관리할 수 있을것 같은데 .java 파일로 관리하는 이유가 뭘까? 먼저 첫번째 의문을 해결하기 위해 Kafka 외부 라이브러리를 설치하여 구현이 어떻게 되어있는지 확인해보았다. 제일 먼저 Consumer쪽에서 메시지를 consume 하기 위해 사용하는 어노테이션은 @KafkaListe..
[Kafka] acks, ack-mode란?
·
Backend/Kafka
Kafka를 사용할때는 대게 메시지를 발행하는 Producer, 메시지를 관리하는 Broker, 메시지를 처리하는 Consumer로 이루어져 있다. 이때 Producer가 Broker에 메시지를 발행할때 발행한 메시지를 실제로 잘 받았는지 알아야 신뢰성 있는 설계라고 할 수 있다 만약 메시지를 보냈는데 중간에 네트워크 유실로 인해 broker에서 메시지를 못받았다면? 그리고 유실된 메시지가 사용자 돈과 관련된 거라면? 서비스가 심각한 장애사항이 될 수 있을 것이다 마찬가지로 Broker가 가진 메시지를 Consumer가 consume해서 메시지를 처리할때 consumer에서는 어디까지 메시지를 읽었는지를 Broker에게 알려줘야하고 그 값을 받아서 저장하고 그 다음 메시지를 consume할 수 있도록 ..
[Java] Thread와 Runnable 이란?
·
Programming/Java
쓰레드란?스레드(thread)란 프로세스 안에서 작업을 실행하는 가장 최소 단위를 말하며 자바에서는 JVM(Java Virtual Machine)에 의해 관리가 된다. 즉 JVM 프로세스가 생기고 main은 그 안의 main 스레드가 실행한다. 이때 main 스레드만 실행되지 않고 여러 스레드가 같이 실행된다 public static void main(String[] args) throws IOException { System.out.println("PID: " + ProcessHandle.current().pid()); System.in.read(); }}jps -l // 현재 실행되고 있는 자바 프로세스 목록 + PIDjstack // 스레드 덤프 간단하게 콘..
[SpringBoot] 매칭 타이머를 Redis에서 DB로 옮긴 이유(멱등성)
·
Backend/SpringBoot
현재 내가 소마에서 진행하고 있는 프로젝트는 모여타라는 서비스로 목적지가 비슷한 사람들을 묶어 택시를 함께 타게 해주는 서비스이다. 승객이 먼저 모여 해당 방의 정원이 차면 매칭방에 지정한 출발지를 기준으로 3km 내의 기사를 호출하여 기사와 동승방이 매칭이 되어 함께 타서 비용을 절감할 수 있는 택시 모빌리티 서비스이다. 이때 매칭방과 관련해서 최대 3분동안 1km부터 시작해서 500m 씩 넓혀가며 최대 3km 인근의 기사를 찾아 호출한다. 그냥 간단하게 3km로 찾으면 되지 않나요? 라고 생각할 수 있지만 우리는 동승 택시 서비스이기에 혼자타는 것보다는 당연히 사람들이 인원이 다 모여야 하는 대기 시각 + 기사와 매칭방이 매칭이 되는 시각 까지 하면 사용자가 어느정도 시간을 투자해야 된다고 생각하여 ..
[Kafka] MSA 프로젝트 실습 - 회원가입 이벤트로 이메일 발송하기
·
Backend/Kafka
지난 글에서 카프카 서버 3대로 클러스터를 구성하고 레플리케이션까지 실습해보았다. https://mari-laveau.tistory.com/312 이제 기본기는 어느 정도 배웠으니, 지금까지 배운 것들(토픽, 컨슈머 그룹, 파티션, 레플리케이션, 재시도, DLT)을 한 번에 써먹는 미니 MSA 프로젝트를 만들며 실습을 진행하였다. Kafka는 MSA 구조에서 많이 사용된다고 했는데, 실제로 어떤 식으로 쓰이는지 눈으로 확인해보는 게 목적이다. 프로젝트 설계구현할 기능은 단순하다. 회원 가입을 하면 회원가입 축하 이메일을 발송하게 만들기.User Service (8080) : 회원 가입 기능만 담당. 가입한 사용자 정보를 User DB에 저장Email Service (8081) : 이메일 발송 기능만 담당..
[Kafka] 브로커, 클러스터, 레플리케이션이란?
·
Backend/Kafka
지난 글까지는 EC2에 카프카 노드 1대만 띄워놓고 실습을 진행했었다. https://mari-laveau.tistory.com/307 그러다 문득 의문이 들었다. "지금 구조에서 이 카프카 서버가 고장나면 어떻게 되는 거지?" 노드가 1대뿐이니 메시지를 전달하는 것 자체가 막혀서 서비스 장애로 직결된다. 이번에는 카프카의 고가용성(시스템이 장애 상황에서도 멈추지 않고 정상적으로 서비스를 제공할 수 있는 능력)을 확보하는 방법을 실습하며 정리한다. 노드, 클러스터, 브로커, 컨트롤러, 레플리케이션이란?노드(node) : 카프카가 설치되어 있는 서버 단위클러스터(cluster) : 여러 대의 서버가 연결되어 하나의 시스템처럼 동작하는 서버들의 집합브로커(broker) : 메시지를 저장하고 클라이언트의 요청..