[Devops] Kafka 로컬 실습 2. Zookeeper + Kafka + Kafka Manager 설치/간단 예제

Walter Mitty·2023년 9월 22일
0

Kafka

목록 보기
2/4

참고자료 by Jeffrey Oh

설치

실습 1. 에서 docker-compose를 설치한 이유는 한번에 관리하기 위함이다. kafka를 위한 docker-compose.yml 파일을 /home/user 경로에 생성해보자.

1) kafka 폴더 생성

mkdir kafka

2) kafka 폴더로 이동해서 docker-compose.yml 파일 생성

만약 다른 이름으로 해주면 실행시 -f를 붙여줘야해서 docker-compose.yml로 했다.

vi docker-compose.yml

2-1) docker-compode.yml 의 내용.
주의할 점은 environment쪽 [ip address]에는 가상머신으로 설치한 경우 가상머신의 IP를, 외부 서버로 한다면 Public IP를 입력하면 되는데, 나는 로컬로 실습하는 중이므로 localhost를 입력했다.

입력 방법은 i를 눌러서 Insert 모드로 만들어 준 후 아래 내용을 복사 후 esc를 눌러서 Insert 모드를 종료하고 :wq를 입력해서 쓰면서 저장하고 나오기를 해준다.

version: '3'

services:

  zookeeper:
    image: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    networks:
      - kafka-net
    restart: always

  kafka:
    image: wurstmeister/kafka
    container_name: kafka
    ports:
      - "9091:9091"
      - "9092:9092"
      - "29092:29092"
      - "29094:29094"
    networks:
      - kafka-net
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - zookeeper
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_LOCALHOST://localhost:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_LOCALHOST://localhost:9092,PLAINTEXT_HOST://[ip address]:9091
      #KAFKA_LISTENERS: PLAINTEXT://:29092,PLAINTEXT_LOCALHOST://:9092
      KAFKA_LISTENERS: PLAINTEXT://:29092,PLAINTEXT_LOCALHOST://:9092,PLAINTEXT_HOST://:9091
      #KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_LOCALHOST:PLAINTEXT
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_LOCALHOST:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_JMX_PORT: "29094"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_SOCKET_REQUEST_MAX_BYTES: 2147483647
      KAFKA_MESSAGE_MAX_BYTES: 2147483647
      KAFKA_HEAP_OPTS: "-Xms6g -Xmx8g"

  akhq:
    image: tchiotludo/akhq
    container_name: akhq
    ports:
      - "18080:8080"
    networks:
      - kafka-net
    restart: always
    depends_on:
      - kafka
    environment:
      AKHQ_CONFIGURATION: |
        akhq:
          connections:
            kafka:
              properties:
                bootstrap.servers: kafka:29092

volumes:
  esdata1:
    driver: local

networks:
  kafka-net:
    driver: bridge

3) docker-compose 실행

docker-compose up

이때 만약 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
문구가 뜬다면, 간단하게는 Docker Desktop을 설치하고 어플리케이션을 실행한다음 다시 up을 시켜보면 아래처럼 잘 실행된다.
Docker Desktop에서도 확인할 수 있다.

실습

터미널 1,2 이렇게 두개를 띄워주자.

터미널 1,2 에서 공통 실행할 것

1) docker 실행

docker ps

2) bash를 통해 컨테이너 접근

docker exec -it kafka /bin/bash

정상적으로 실행 되었다면 bash를 통해 컨테이너에 접근한다.
컨테이너는 /opt/kafka/bin/ 경로에 있다! bin으로 이동 고고

그러면 kafka Shell script들이 나오는데, 여기서 kafka-topics.sh, kafka-console-consumer.sh, kafka-console-producer.sh 에 접근해 실습을 해볼것이다.

cd /opt/kafka/bin

Producer & Consumer
메시지를 보낼 때는 Producer을 사용하고 받을 때는 Consumer를 사용한다.


터미널 1
1)

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

> 뜨고 커서 깜빡거리는 것 까지 확인


터미널 2
1) 메시지를 보내기 위해 Topic을 생성한다

./kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test

2)

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

터미널 1
1) 메시지를 보내보자! 한글/영어 상관없이 입력!
터미널 2를 확인해보자.


터미널 2
터미널 2에서는 터미널 1이 보낸 메시지를 잘 읽어온다.


히히 재밌땅


웹 브라우저
메시지를 보낸다음 http://localhost:18080/으로 이동해보자.
그럼 akhq.io로 이동이 될텐데, 보냄과 동시에 읽기를 확인할 수 있는 곳이다.
들어가서 보면 아까보낸 두개의 메시지가 잘 카운트 되어 들어와있는걸 볼 수 있다.

클릭해보면,


메시지도 확인 가능하고 Partition, Offset도 확인이 가능하다.

끝나면 ctrl + c로 다 종료해준다.

0개의 댓글