Web Server

Mac(IOS-M1칩)환경 도커(docker) + 카프카(kafka) 환경 구성하기 (1)

dev.mk 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)으로

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

 

 

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

반응형