ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mac(IOS-M1칩)환경 도커(docker) + 카프카(kafka) 환경 구성하기 (1)
    Web Server 2023. 4. 16. 15:01
    반응형

    스프링으로 실시간 메세지 전송기능을 공부하다가 많이 사용하는 카프카의 대해 정리해본다.

     

    아래의 이미지는 주키퍼의 구성도다

    출처: https://ssup2.github.io/theory_analysis/ZooKeeper/

    이 그림에서 Server는 주키퍼, Client는 카프카라고 생각하면 된다.

     

    • 카프카란?

    - 분산형 스트리밍 플랫폼(A distributed streaming platform)

    - LinkedIn에서 여러 구직 및 채용 정보들을 한곳에서 처리(발행-구독) 할 수 있는 플랫폼으로 개발이 시작

     (발행/구독: publish-subscribe 은 메시지를 특정 수신자에게 직접적으로 보내주는 시스템이 아니고, 메시지를 받기를 원하는 사람이 해당 토픽(topic)을 구독함으로써 메시지를 읽어 올 수 있다.)

    • 특징

    - 대용량 실시간 로그처리에 특화되어 설계된 메시징 시스템으로 TPS가 매우 우수

    - 메시지를 메모리에 저장하는 기존 메시징 시스템과는 달리 파일에 저장을 하는데 그로 인해 카프카를 재 시작해도 메시지 유실 우려가 감소

    - 대용량처리에 특화 : 컨슈머(Consumer)가 브로커(Broker)로부터 메시지를 직접 가져가는 PULL방식으로 동작 > 컨슈머는 자신의 처리능력만큼의 메시지만 가져와 최적의 성능

    - 확장성(scale-out) 고가용성(high availability)을 위하여 broker들이 클러스터로 구성되어 동작하도록 설계되어있다. 심지어 broker 1개 밖에 없을 때에도 클러스터로써 동작한다. 클러스터 내의 broker에 대한 분산 처리는 Apache ZooKeeper가 담당

     

    • 주키퍼란?

    - 주키퍼는(Zookeeper)는 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트다. 이러한 어플리케이션의 목적은 개발자가 코디네이션 로직보다는 비즈니스 핵심 로직에 집중하게끔 지원하는 역할


    • 주키퍼 사용용도

     - 주키퍼는 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 주로 사용

     - 상태 정보를 지노드(znode)라 불리는 곳에 key-value 형태로 저장한다. 이 지노드에 저장된 key-value를 이용하여 분산 애플리케이션은 서로 데이터를 주고 받는다.

     - 지노드는 일반 컴퓨터의 파일이나 폴더 개념으로 생각하자.

     

    출처 https://programacion.tistory.com/156

     

     

     

    #도커는 이미 설치되었다는 가정하에 카프카 설치부터 시작함

    1. kafa docker 이미지 다운

    터미널을 실행하고 아래의 git주소를 입력하여 이미지를 다운 받는다

    git clone https://github.com/wurstmeister/kafka-docker

    설치 후 

    ls 명령어로  kafka-docker 폴더가 생성된 것을 확인하실 있다.

     

    2. docker-compose.yml 파일 수정

    !!카프카는 카프카클러스터와 주키퍼가 설치되어 있어야해서 docker-compose로 컨테이너간의 연결작업이 필요하다.

     

    카프카 폴더 접근 후

    cd kafka-docker

    vi편집기로 설정 파일을 연다.

    vi docker-compose.yml

    본인의 설정파일와 아래의 설정파일 내용이 상이하면 수정 및 추가한다.

     

    docker-compose.yml

    version: '2'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        container_name: zookeeper
        ports:
          - "2181:2181"
        restart: unless-stopped
    
      kafka:
        build: .
        container_name: kafka
        ports:
          - "9092:9092"
        environment:
          DOCKER_API_VERSION: 1.22
          KAFKA_ADVERTISED_HOST_NAME: localhost
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
        restart: unless-stopped

    본인이 수정 및 추가한 항목은 아래와 같다.

    container_name: zookeeper

    container_name: kafka

    KAFKA_ADVERTISED_HOST_NAME:localhost 

     

    3. Docker로 카프카 서버띄우기

    설정파일을 수정 후 아래의 명령어를 터미널에 입력하면

    zookeeper도 함께 다운이 되고 카프카 이미지가 도커 서버에 올라간다.

    docker-compose -f docker-compose.yml up -d

    도커 컨테이너 확인하기

    docker ps

    위에 docker-compose.yml 설정파일에서 설정했던 컨테이너명(container_name: kafka, zookeeper)으로

    도커에 올라간걸 확인한다.

     

     

    다음 포스팅에서는 서버에서 직접 메세지를 주고 받는 테스틑 해보겠다.

    반응형

    댓글

Designed by Tistory.