728x90
반응형

작성한 docker-compose 파일은 다음과 같다

version: '3.1'
services:
  zookeeper:
    container_name: zookeeper
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    depends_on:
      - zookeeper

zookeeper → 2181:2181

kafka → 9092:9092

docker-compose 실행

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

docker-compose 종료

docker-compose -f docker-compose-single-broker.yml down

kafka container에 들어가서 /opt/kafka_2.13-2.8.1/bin 으로 들어가면 사용할 수 있는 명령어들을 확인할 수 있다.

kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic quickstart

해당 명령어로 토픽 만들어서 실행해봄

kafka UI Tool 사용

Kafka-UI Tool 을 이용하여 Kafka 관리하기

UI for Apache Kafka 사용

version: '2'
services:
  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - "8989:8080"
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=localhost
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
 

GitHub - provectus/kafka-ui: Open-Source Web UI for Apache Kafka Management

Open-Source Web UI for Apache Kafka Management. Contribute to provectus/kafka-ui development by creating an account on GitHub.

github.com

현재 접속 가능한 URL

http://172.10.40.152:8989/

(이 주소는 현재 회사 VPN으로 연결된 서버라서 본인 우분투 서버의 public ip에 8989 포트를 이용해서 열면된다.)

[Brokers 화면]

[Topics 화면]

UI로도 만들 수 있는데, 실제 컨테이너에 들어가서 명령어를 이용해서 topic을 생성할 수도 있다.

[topic 생성해보기]

docker exec -it kafka /bin/bash

cd /opt/kafka_2.13-2.8.1/bin

kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test

Topic 생성된 것 확인 가능

[Topic으로 신호 주고받기]

test topic 듣고 있는 producer를 하나 만듬

kafka-console-producer.sh --topic test --bootstrap-server kafka:9092

그리고 hi, hello, yo-man을 차례대로 보냈다.

UI에서 해당 메시지가 온것을 확인할 수 있다. (아니면 직접 consumer를 명령어로 실행시켜서 확인할 수도 있다.)

kafka-console-consumer.sh —topic tet —from-beginning —bootstrap-server kafka:9092

카프카를 사용하는 서비스(Store Service) 배포

docker build --platform linux/amd64 -t kimtaeheon/storeservice:1.0 .

docker save -o store-service.tar kimtaeheon/storeservice:1.0

scp store-service.tar root@{harbor주소}:/root/kth

docker load -i /kth/store-service.tar

docker tag kimtaeheon/storeservice:1.0 msa.harbor.com/library/storeservice:1.0

docker push msa.harbor.com/library/storeservice:1.0
apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-deployment
  labels:
    app: store
spec:
  replicas: 1
  selector:
    matchLabels:
      app: store
  template:
    metadata:
      labels:
        app: store
    spec:
      containers:
      - name: store
        image: msa.harbor.com/library/storeservice:1.0
        imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: store-service
spec:
  clusterIP: 10.104.193.24
  selector:
    app: store
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
 

오류 1 : kafka 연결이 안되는듯..

java.net.UnknownHostException: kafka

해결 : kafka docker-compose에서 KAFKA_ADVERTISED_HOST_NAME 속성 수정

version: '3.1'
services:
  zookeeper:
    container_name: zookeeper
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 172.10.40.152
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    depends_on:
      - zookeeper
728x90
반응형

+ Recent posts