[Apache] Kafka 클러스터 구축

김창현·2023년 9월 4일
0
post-thumbnail

Docker-compose를 이용한 kafka 클러스터 구축하기

1. 자신의 환경에 맞는 Docker 설치


Docker 설치하기

2. docker-compose 작성


docker-compose.yml or .yaml

version: '3.7'
services: 

  zk1:
    container_name: zookeeper1
    image: wurstmeister/zookeeper:latest
    restart: always
    hostname: zk1
    ports:
      - "2181:2181"
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - "~/zk-cluster/zk1/data:/data"

  zk2:
    container_name: zookeeper2
    image: wurstmeister/zookeeper:latest
    restart: always
    hostname: zk2
    ports:
      - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - "~/zk-cluster/zk2/data:/data"

  zk3:
    container_name: zookeeper3
    image: wurstmeister/zookeeper:latest
    restart: always
    hostname: zk3
    ports:
      - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    volumes:
      - "~/zk-cluster/zk3/data:/data"

  kafka1:
    container_name: kafka1
    image: wurstmeister/kafka:latest
    restart: on-failure
    depends_on:
      - zk1
      - zk2
      - zk3
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
      BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
      KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2

  kafka2:
    container_name: kafka2
    image: wurstmeister/kafka:latest
    restart: on-failure
    depends_on:
      - zk1
      - zk2
      - zk3
    ports:
      - "9093:9092"
    volumes:
       - /var/run/docker.sock:/var/run/docker.sock
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
      BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
      KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2

  kafka3:
    container_name: kafka3
    image: wurstmeister/kafka:latest
    restart: on-failure
    depends_on:
      - zk1
      - zk2
      - zk3
    ports:
      - "9094:9092"
    volumes:
       - /var/run/docker.sock:/var/run/docker.sock
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ADVERTISED_HOST_NAME: 34.64.123.128
      BOOTSTRAP_SERVERS: 34.64.123.128:9092, 34.64.123.128:9093, 34.64.123.128:9094
      KAFKA_ZOOKEEPER_CONNECT: "zk1:2181,zk2:2182,zk3:2183"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2

  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - "10000:8080"
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=:34.64.123.128:9092,34.64.123.128:9093,34.64.123.128:9094
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zk1:2181,zk2:2182,zk1:2183

code review

version: docker-compose 버전을 지정합니다

  • services: docker-compose의 경우 docker 컨테이너로 수행될 서비스들은 services 하위에 기술합니다.

  • zookeeper: 서비스 이름을 zk1, zk2, zk3으로 작성했습니다.
    service 하위에 작성하면 서비스 이름으로 동작합니다.

  • image: wurstmeister/zookeeper:latest

  • environment: 몇몇 환경변수를 지정할 수 있습니다.

  • ZOO_MY_ID: zookeeper에서 앙상블이라고 하는 클러스터 내에서 주키퍼를 구별하기 위한 환경변수 id는 반드시 유일해야 하며 1~255 사이에 값이 들어가야 합니다.

  • ZOO_SERVERS**: zookeeper 앙상블(클러스터) 내 시스템 목록을 지정 즉 클러스터 내 주키퍼 노드 리스트들을 입력합니다
    server.id=::[:role];[:] 형식으로 입력합니다
    kafka

  • image: wurstmeister/kafka:latest

  • depends_on:
    docker-compose에서는 서비스들의 우선순위를 지정해 주기 위해서 depends_on을 이용합니다.
    zk라고 지정하였으므로, kafka는 zookeeper이 먼저 실행되어 있어야 컨테이너가 올라오게 됩니다.

  • ports:
    kafka 브로커의 포트를 의미합니다.

  • 외부포트 : 컨테이너내부 포트 형식으로 지정합니다.

  • environment:

  • KAFKA_BROKER_ID: 클러스터 각 노드에 할당할 브로커의 아이디 유니크 해야 합니다.

  • KAFKA_ADVERTISED_HOST_NAME: kafka 브로커에 사용할 host 정보

  • BOOTSTRAP_SERVERS: kafka 브로커 리스트를 나열해 주면 됩니다.

  • KAFKA_ZOOKEEPER_CONNECT: 연결할 zookeeper를 지정해 줍니다.

  • KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 토픽 파티션의 복제 개수

  • kafka-ui 는 선택사항입니다. 개괄적인 정보를 web-ui로 제공 받고 싶으시면 추가하시는 것을 추천 드립니다.

    📎 Local이나 본인 클라우드 환경에 맞게 내부ip를 변경해주어야 합니다.

    Local의 경우 : host.docker.internal 로 변경해주면 됩니당 ~

Docker-Compose 실행 & Container 확인


Docker-Compose 실행

docker-compose up -d 

"-d" 는 백그라운드 실행을 위한 옵션이다.

Container 확인

docker-compose ps 

kafka-ui 접속


자 이제 docker-compose로 kafka cluster를 구축하였으니 ui로 확인해보자.

주소창에 "<외부 ip>:10000 " 를 입력해보자.

🍀 Local에서 한 경우

localhost:10000 으로 입력해주세용 !

Apache Kafka UI 기능

  • 다중 클러스터 관리 : 모든 클러스터를 한 곳에서 모니터링 및 관리

  • 메트릭 대시보드를 통한 성능 모니터링 : 대시보드로 주요 Kafka 메트릭 추적

  • Kafka Broker 보기 : 주제 및 파티션 할당, 컨트롤러 상태 보기

  • Kafka 주제 보기 : 파티션 수, 복제 상태 및 사용자 정의 구성 보기

  • 소비자 그룹 보기 : 파티션별 고정 오프셋, 결합 및 파티션별 지연 보기

  • 메시지 찾아보기 : JSON, 일반 텍스트 및 Avro 인코딩으로 메시지 찾아보기

  • 동적 주제 구성 : 동적 구성으로 새 주제 생성 및 구성

  • 구성 가능한 인증 : Github/Gitlab/Google OAuth 2.0(옵션)으로 설치 보안







⭐ 다음은 logstah를 활용하여 django의 로그데이터를 받아보도록 하겠습니다. ⭐

0개의 댓글