DE/Docker

Docker에 Kafka container 만들기

winter0pear 2023. 10. 10. 23:43
 

Docker

 

hub.docker.com

1.  Docker hub에서 image 가져오기

docker pull bitnami/kafka:latest

 

2. Docker compose 설치

 

Kafka Broker & Zookeeper란?

Kafka Broker & Zookeeper란? 브로커(broker)는 실행된 Kafka application 서버를 뜻한다. 주키퍼(zookeeper)는 이러한 분산 메세지 큐의 정보를 관리해 주는 역할을 한다. kafka를 띄우기 위해서는 주키퍼가 반드시

devbksheen.tistory.com

kafka는 단독으로 실행되기 보다 zookeeper와 같이 실행이 된다

Docker compose를 이용하여 zookeeper와 kafkaf container를 동시에 띄워주면 된다

zookeeper에서 분산코디네이션 서비스를 제공해주기 때문

  • zookeeper :  메타데이터(Broker id, Controller id 등) 저장

kafka cluster 중 하나는 controller로 각 브로커에게 담당 파티션 할당, 브로커 정상 동작 모니터링 관리를 함

$ sudo apt install -y python3-pip
$ sudo pip3 install docker-compose
$ docker compose version

 

3. Docker compose 작성

  • zookeeper cluster
 

zookeeper - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links Quick reference (cont.) What is Apache Zookeeper? Apache ZooKeeper is a software project of the Apache Software Foundation, providing an open source distributed configuration service, synchroni

hub.docker.com

  zk1:
    container_name: zk1
    image: zookeeper:3.5
    networks:
      - kafka-net
    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:
      - "zk1_data:/data"

 

  • kafka cluster
  kafka1:
    container_name: kafka1
    hostname: kafka1
    image: docker.io/bitnami/kafka:latest
    networks:
      - kafka-net
    restart: on-failure
    ports:
      - "19092:19092"
      - "19094:19094"
    volumes:
      - "kafka1_data:/kafka-data"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zk1:2181,zk2:2181,zk3:2181
      - KAFKA_CFG_LISTENERS=INTERNAL://:19092,EXTERNAL://:19094
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka1:19092,EXTERNAL://localhost:19094
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
    depends_on:
      - zk1
      - zk2
      - zk3
  1. KAFKA_CFG_ZOOKEEPER_CONNECT 
    zookeeper cluster와 연결
  2. KAFKA_CFG_LISTENERS
    브로커가 클라이언트와 통신하기 위한 네트워크 포트 및 프로토콜 구성
    PLAINTEXT://localhost:9092로 설정하면 브로커는 localhost의 9092 포트에서 PLAINTEXT 프로토콜을 사용하여 들어오는 클라이언트 연결을 수신
  3. KAFKA_CFG_ADVERTISED_LISTENERS
    kafka를 외부에서 접속할때 이 설정값을 이용하여 브로커가 클라이언트와 통신 
  4. KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
    보안 프로토콜을 맵핑해준다
  5. KAFKA_CFG_INTER_BROKER_LISTENER_NAME
    kafka에서 broker간 통신하기위한 이름을 알려주기 위해서 사용한다
  6. KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR
    topic에 대한 복제 수를 지정할 수 있음

'DE > Docker' 카테고리의 다른 글

Docker 설치하기  (1) 2023.10.10