MSA, Kafka, RedPanda

seobin·2025년 2월 18일

컨슈머, 메세지큐, 토픽 등 컨셉을 이해하자.

HTTP vs. Kafka

HTTP

  • 통신 주체가 2개이다(서버 대 서버 혹은 클라이언트 대 서버)
  • 요청을 주고 응답을 받는다.
  • 서버가 여러 대라고 할지라도, 한 번에 하나의 서버에만 요청 가능
  • 요청을 보냈을 때 서버에 문제가 있어서 응답을 못한다면 요청이 유실될 수 있음
    ex) 전화. 전화를 걸었을 때 상대가 요청을 받지 않으면 응답을 받지 못함

Kafka

  • 요청만 가능하다
  • 한 번 요청하면 해당 요청에 관련된 모든 서버(=컨슈머)에게 요청이 전달됨
  • 컨슈머에게 요청을 보내면 알아서 다른 서버들에게 요청을 보냄
  • 요청 유실의 걱정이 덜함
    ex) 카톡. 요청을 보낼 시 상대가 요청을 받지 않아도 나중에 응답 가능

카프카는 MSA를 위한 것
http처럼 하나의 프로토콜이다.

HTTP(REST) - 전화

  • 요청을 하면 응답이 온다(양방향 통신)
  • 한번에 하나의 서버에만 요청 가능

카프카는 단방향 통신이므로 응답은 받을 수 없다.

  • HTTP
    요청자 : 브라우저, 서버
    응답유무 : 있음
    요청의 수신자 수 : 1명

  • 카프카
    요청자 : 서버
    응답유무 : 없음
    요청의 수신자 수 : 현재 메세지가 쓰여지는 카톡방에 참여중인 모든 사람

카프카 - 카톡
요청만 할 수 있다.
한번 요청을 하면 해당 요청에 관련된 모든 서버(컨슈머)에게 요청이 전달 된다.
카프카가 나오기 이전, 원조는 RabbitMQ이다.

  • RedPanda
    카프카의 구현체
    기본적으로 kafka api와 호환 가능
    주키퍼/JVM 없음
    카프카보다 10배 빠름
    파티션 limit이 2백만개(무료)

RedPanda 실습

트리플 브로커가 안정적 이지만 원활한 실습을 위해 싱글 브로커로 설치, 8070으로 콘솔에 접속

  1. 폴더를 하나 만들고 git bash를 연다.
  2. vi docker-compose.yml // vi 편집기에서 docker-compose.yml 파일 열기

💡vi 사용법

  • vi에서 편집 모드로 전환하기
    vi는 기본적으로 명령 모드에서 열리기 때문에 파일을 수정하려면 편집 모드로 전환해야야 함 → i 또는 a 입력

  • 편집 후 저장 및 종료
    편집이 끝난 후 저장하고 나가려면 명령 모드로 돌아가야 함

    Esc 명령 모드로 돌아가기
    :wq 저장 후 종료
    :q! 저장 없이 종료
    :w 저장만 하고 계속 작업
  1. docker-compose up -d // docker-compose.yml 파일 작성 후 docker compose 실행


- 도커 실행 확인


콘솔에서 토픽(단톡방) 파서 메세지 작성(프로듀스)했을 때 관련자(컨슈머)들이 즉시 수신하는 것을 명령으로 실습하기

  • 터미널 띄우기
winpty docker exec -it redpanda-0 bash
  • 토픽 생성
터미널 1 : 토픽 chat-room-1 생성
rpk topic create chat-room-1
  • 토픽 메세지 생성
rpk topic produce chat-room-1
메세지 1
메세지 2
...
# 종료는 Ctrl + C
  • 토픽 메세지 수신
터미널 2 : 토픽 chat-room-1 에 메세지 수신
rpk topic consume chat-room-1
...
# 종료는 Ctrl + C


  • 실행 결과 확인
    localhost:8070으로 접속하여 메세지 확인 가능

0개의 댓글