Step 1. Kafka 설치하기

로컬 환경에서 실험을 위해 주키퍼 1개, 카프카 브로커 1개를 docker-compose를 사용해 설치한다.

# docker-compose.yml
version: '2'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
    ports:
      - "2181:2181"

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - "29092:29092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0

위의 docker-compose를 사용해 container를 구동시킨다.

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

kafka의 topic을 생성해 줘야한다. (내 topic : kafka-market) docker 내부에서 커맨드를 실행할거면 kafka-topics 부터 입력하면된다.

# topic 생성
$ docker-compose exec kafka kafka-topics --create --topic kafka-market --bootstrap-server kafka:9092 --replication-factor 1 --partitions 1

# topic 생성 확인
$ docker-compose exec kafka kafka-topics --describe --topic kafka-market --bootstrap-server kafka:9092

이렇게 하면 나는 kafka broker 한대를 만들었고, kafka-market 이라는 topic을 생성했다.

Step 2. Websocket STOMP Server 구축

Untitled

from slow 정신을 따라 우선 stomp 프로토콜부터 구현하고 kafka를 연결해보자. 두개의 파일을 생성한다.

build.gradle 추가할 의존성

implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.kafka:spring-kafka'

config 설정파일

여기서 3개의 설정을 해주고있다.

  1. socket 최초 연결을 위한 path 설정 : registry.addEndpoint("/ws-market")