데이터 엔지니어 기술 블로그

[🧙Kafka] 카프카 구축 (2) - 카프카 도커로 쉽게 설치하기 본문

데이터 엔지니어링

[🧙Kafka] 카프카 구축 (2) - 카프카 도커로 쉽게 설치하기

jun_yeong_park 2021. 4. 6. 18:18
반응형

About

이번에는 카프카를 도커로 설치하고 '카프카 설치 (1)' 에서 했던 주키퍼 앙상블을 연결하려고 한다.

하나의 컴퓨터에서 클러스터를 구성해보고, 배포할 때 크게 변경 없이 배포하기 위해 도커로 구성하려고 한다.

카프카 브로커는 5개로 구성하고 크기를 쉽게 변경 가능하도록 하려고 한다.

 

Tutorial & Example

1. 작업할 폴더를 생성한다.

2. Dockerfile을 아래와 같이 작성한다.

FROM ubuntu:18.04
RUN mkdir -p /root/install
RUN apt-get update

WORKDIR /root/install

ENV DEBIAN_FRONTEND noninteractive
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

RUN apt-get install openjdk-8-jdk -y
RUN apt-get install wget -y
RUN apt-get install vim -y

RUN wget https://downloads.apache.org/kafka/2.7.0/kafka_2.13-2.7.0.tgz
RUN tar -zxvf kafka_2.13-2.7.0.tgz
RUN mv kafka_2.13-2.7.0 /usr/local/kafka
RUN mkdir /data

COPY config/init.sh init.sh
RUN sed -i 's/\r//g' init.sh

COPY config/server.properties /usr/local/kafka/config/server.properties
RUN sed -i 's/\r//g' /usr/local/kafka/config/server.properties

CMD bash init.sh

3. config 폴더를 생성한다.

4. config 폴더에 init.sh 파일을 생성하고 아래의 코드를 입력한다.

sed -i "s/{{broker_id}}/$BROKER_ID/" /usr/local/kafka/config/server.properties

/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties

5. config 폴더에 아래의 설정을 추가한다. broker.idinit.sh에서 추가해주기 때문에 생략했다.

num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.bytes=5368709120
log.retention.check.interval.ms=300000
zookeeper.connect=pipeline-zookeeper-a:2181,pipeline-zookeeper-b:2181,pipeline-zookeeper-c:2181/default-kafka
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
auto.create.topics.enable=false
broker.id={{broker_id}}

6. docker-compose.yml 파일을 작성한다. 여기에서는 5개로 구성했다.

version: '3.8'
volumes:
  pipeline-kafka-1-volume:
    name: pipeline-kafka-1-volume
  pipeline-kafka-2-volume:
    name: pipeline-kafka-2-volume
  pipeline-kafka-3-volume:
    name: pipeline-kafka-3-volume
  pipeline-kafka-4-volume:
    name: pipeline-kafka-4-volume
  pipeline-kafka-5-volume:
    name: pipeline-kafka-5-volume

networks:
  default:
    external:
      name: zoo
      
services:
  pipeline-kafka-1:
    container_name: pipeline-kafka-1
    environment:
      BROKER_ID: 1
    hostname: pipeline-kafka-1
    image: pipeline-kafka
    restart: always
    volumes:
      - pipeline-kafka-1-volume:/data

  pipeline-kafka-2:
    container_name: pipeline-kafka-2
    environment:
      BROKER_ID: 2
    hostname: pipeline-kafka-2
    image: pipeline-kafka
    restart: always
    volumes:
      - pipeline-kafka-2-volume:/data

  pipeline-kafka-3:
    container_name: pipeline-kafka-3
    environment:
      BROKER_ID: 3
    hostname: pipeline-kafka-3
    image: pipeline-kafka
    restart: always
    volumes:
      - pipeline-kafka-3-volume:/data

  pipeline-kafka-4:
    container_name: pipeline-kafka-4
    environment:
      BROKER_ID: 4
    hostname: pipeline-kafka-4
    image: pipeline-kafka
    restart: always
    volumes:
      - pipeline-kafka-4-volume:/data

  pipeline-kafka-5:
    container_name: pipeline-kafka-5
    environment:
      BROKER_ID: 5
    hostname: pipeline-kafka-5
    image: pipeline-kafka
    restart: always
    volumes:
      - pipeline-kafka-5-volume:/data

7. Dockerfile을 작성했던 폴더로 가서 Docker를 빌드한다.

docker build --tag pipeline-kafka .

8. docker-compose.yml 을 작성했던 폴더로 가서 아래의 명령어로 실행한다.

docker-compose up -d

9. docker ps로 잘 실행이 되었는지 확인할 수 있다.

실행 결과

10. docker logs pipeline-kafka-1 결과

성공적으로 연결된 것을 볼 수 있다.

 

반응형
Comments