포스트

(멋쟁이사자처럼_백엔드스쿨플러스) Day31 카프카개념/레드판다, 종속성 제거

마이크로 서비스와 카프카

Http 방식과 Kafka 방식의 차이점

  • Http 방식은 요청을 보내고 응답을 받는 방식이다. 요청을 보내면 응답을 받을 때까지 기다려야 한다.
  • Kafka 방식은 요청을 보내고 응답을 받지 않아도 된다. 요청을 보내면 Kafka에 저장되고, 이후에 처리된다.

    구분HTTPKafka
    통신 방식요청-응답(Request-Response) 방식으로 동작한다.발행-구독(Publish-Subscribe) 방식으로 동작한다.
    데이터 저장데이터를 일시적으로만 전달하며 별도로 저장하지 않는다.데이터를 토픽에 저장하고 설정된 보관 기간 동안 유지한다.
    처리 방식동기 방식으로 요청에 대한 응답을 기다린다.비동기 방식으로 메시지를 전송하고 처리한다.
    확장성서버의 확장이 필요할 때 직접적인 서버 증설이 필요하다.브로커와 파티션을 통해 수평적 확장이 용이하다.
    데이터 전달 보장한 번의 요청-응답으로 끝나며 재전송이 필요한 경우 애플리케이션에서 구현해야 한다.메시지 전달 보장을 위한 다양한 옵션(At least once, At most once, Exactly once)을 제공한다.
    부하 처리동시에 많은 요청이 들어올 경우 서버에 부하가 집중된다.메시지를 버퍼링하고 컨슈머 그룹을 통해 부하를 분산한다.
    실시간성실시간 요청-응답이 필요한 경우에 적합하다.대용량 데이터 처리와 지연 없는 스트리밍에 적합하다.
    데이터 순서각 요청이 독립적으로 처리된다.파티션 내에서 메시지 순서를 보장한다.
    에러 처리즉각적인 에러 응답을 받고 처리할 수 있다.메시지 처리 실패 시 재시도나 다른 컨슈머로의 전달이 가능하다.
    사용 사례즉각적인 응답이 필요한 API 통신에 적합하다.대용량 로그 수집, 실시간 데이터 스트리밍, 이벤트 기반 아키텍처에 적합하다.

    Image

모놀리식 아키텍쳐와 마이크로서버 아키텍쳐

  • 모놀리식 아키텍쳐는 하나의 애플리케이션으로 모든 기능을 처리하는 방식이다. 모든 기능을 하나의 애플리케이션으로 처리하기 때문에 개발과 배포가 간단하다.
  • 마이크로서버 아키텍쳐는 여러 개의 애플리케이션으로 기능을 분리하여 처리하는 방식이다. 각각의 애플리케이션은 독립적으로 개발, 배포, 확장이 가능하다.

    구분모놀리식 아키텍처마이크로서비스 아키텍처
    구조하나의 큰 애플리케이션으로 모든 기능이 통합되어 있다.작은 독립적인 서비스들로 분리되어 있다.
    배포전체 애플리케이션을 한 번에 배포해야 한다.각 서비스를 독립적으로 배포할 수 있다.
    확장성전체 애플리케이션을 수직적으로 확장해야 한다.필요한 서비스만 선택적으로 수평 확장이 가능하다.
    데이터베이스하나의 공유 데이터베이스를 사용한다.각 서비스가 독립적인 데이터베이스를 가진다.
    장애 영향한 부분의 문제가 전체 시스템에 영향을 미친다.특정 서비스의 장애가 다른 서비스에 영향을 주지 않는다.
    기술 스택하나의 기술 스택으로 통일되어 있다.각 서비스마다 다른 기술 스택 사용이 가능하다.
    통신 방식함수 호출을 통한 내부 통신을 한다.HTTP/메시징 등을 통한 서비스 간 통신을 한다.
    성능내부 호출로 인해 상대적으로 빠르다.네트워크 통신으로 인한 오버헤드가 있다.
    유지보수코드베이스가 커질수록 유지보수가 어려워진다.각 서비스별 독립적인 유지보수가 가능하다.
    리소스 효율성단일 애플리케이션으로 리소스 공유가 효율적이다.각 서비스별로 리소스가 필요하여 오버헤드가 있다.
    테스트전체 시스템을 한 번에 테스트한다.각 서비스별로 독립적인 테스트가 가능하다.
    복잡성아키텍처가 단순하다.분산 시스템으로 인한 복잡성이 증가한다.
    적합한 상황작은 규모의 애플리케이션이나 빠른 개발이 필요할 때 적합하다.대규모 시스템, 높은 확장성이 필요한 경우에 적합하다.

    Image

레드판다

레드판다란?

  • 레드판다는 카프카를 이용한 실시간 데이터 처리 플랫폼이다. 레드판다는 카프카를 기반으로 데이터를 수집, 저장, 분석하는 기능을 제공한다.
    • 데이터 수집: 다양한 소스로부터 데이터를 수집한다.
    • 데이터 저장: 수집한 데이터를 카프카에 저장한다.
    • 데이터 분석: 저장된 데이터를 분석하여 시각화한다.
    • 실시간 처리: 실시간으로 데이터를 처리하고 결과를 제공한다.

레드판다 설치

  • docker-compose를 이용하여 레드판다를 설치할 수 있다.

    1
    2
    3
    
    mkdir -p ~/project/dockerProjects/redpandaExam1
    cd ~/project/dockerProjects/redpandaExam1
    vi docker-compose.yml
    
  • docker-compose를 이용하여 레드판다를 설치할 수 있다.

    version: "3.7"
    name: redpanda-quickstart-one-broker
    networks:
      redpanda_network:
        driver: bridge
    volumes:
      redpanda-0: null
    services:
      redpanda-0:
        command:
          - redpanda
          - start
          - --kafka-addr internal://0.0.0.0:9092,external://0.0.0.0:19092
          # Address the broker advertises to clients that connect to the Kafka API.
          # Use the internal addresses to connect to the Redpanda brokers'
          # from inside the same Docker network.
          # Use the external addresses to connect to the Redpanda brokers'
          # from outside the Docker network.
          - --advertise-kafka-addr internal://redpanda-0:9092,external://localhost:19092
          - --pandaproxy-addr internal://0.0.0.0:8082,external://0.0.0.0:18082
      
          # Address the broker advertises to clients that connect to the HTTP Proxy.
          - --advertise-pandaproxy-addr internal://redpanda-0:8082,external://localhost:18082
          - --schema-registry-addr internal://0.0.0.0:8081,external://0.0.0.0:18081
    
          # Redpanda brokers use the RPC API to communicate with each other internally.
          - --rpc-addr redpanda-0:33145
          - --advertise-rpc-addr redpanda-0:33145
      
          # Tells Seastar (the framework Redpanda uses under the hood) to use 1 core on the system.
          - --smp 1
      
          # The amount of memory to make available to Redpanda.
          - --memory 1G
      
          # Mode dev-container uses well-known configuration properties for development in containers.
          - --mode dev-container
            
          # Enable logs for debugging.
          - --default-log-level=debug
      
        image: docker.redpanda.com/redpandadata/redpanda:v23.3.6
        container_name: redpanda-0
        volumes:
          - redpanda-0:/var/lib/redpanda/data
        networks:
          - redpanda_network
        ports:
          - 18081:18081
          - 18082:18082
          - 19092:19092
          - 19644:9644
        console:
          container_name: redpanda-console
          image: docker.redpanda.com/redpandadata/console:v2.4.3
          networks:
            - redpanda_network
          entrypoint: /bin/sh
          command: -c 'echo "$$CONSOLE_CONFIG_FILE" > /tmp/config.yml; /app/console'
          environment:
            CONFIG_FILEPATH: /tmp/config.yml
            CONSOLE_CONFIG_FILE: |
              kafka:
                brokers: ["redpanda-0:9092"]
                schemaRegistry:
                enabled: true
                urls: ["http://redpanda-0:8081"]
              redpanda:
                adminApi:
                enabled: true
                urls: ["http://redpanda-0:9644"]
        ports:
          - 8070:8080
        depends_on:
          - redpanda-0
    
  • comose up을 통해 레드판다를 실행한다.

    1
    2
    3
    
    cd ~/project/dockerProjects/redpandaExam1
    docker compose up -d
    ## 레드판다 콘솔 - http://localhost:8070 을 통해 접속 할 수 있다.
    

    Image

레드판다 토픽, 프로듀스, 컨슈머

  • 토픽(topic) : 토픽을 생성하면 해당 토픽의 컨슈머는 메세지가 발행 될 때마다 메세지를 받을 수 있다.

    1
    
    docker exec -it redpanda-0 rpk topic create [topic_name]
    

    Image

  • 프로듀스(produce) : 토픽에 메세지를 발행한다.

    1
    2
    3
    4
    5
    6
    7
    8
    
    docker exec -it redpanda-0 rpk topic produce [topic_name] -p "Hello, Redpanda!"
      
    ### 또는 이런방식으로 진행
    docker exec -it redpanda-0 rpk topic produce [topic_name]
    [메세지 입력]
    [메세지 입력]
    [메세지 입력]
    # 종료는 Ctrl + C
    

    Image

  • 컨슈머(consumer) : 토픽에 발행된 메세지를 소비한다.

    1
    2
    
    docker exec -it redpanda-0 rpk topic consume [topic_name]
    # 종료는 Ctrl + C
    

    Image

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.