docker-compose 를 사용하여 kafka 개발환경 구축해보기!
- 로컬 개발환경에서 사용할 목적으로 
kafka를docker로 설치하려고 한다. - 
    
kafka는zookeeper를 같이 사용해줘야해서docker-compose를 사용해야한다. - docker는 이미 설치되어 있어야함.
 
docker-compose 설치
- 글 작성 시기의 버전으로 만들어 놓은 명령어(version : 
1.24.1) 
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
설치확인
- 아래 명령어를 입력하여, version 을 확인할 수 있으면 설치가 된 것!
    
docker-compose -v
 - install 관린 글
 
https://github.com/Yelp/docker-compose/blob/master/docs/install.md
docker-compose.yml 작성
zookeeper
- 로컬 환경이므로 1대만 구성! (운영 환경이라면 고민이 필요 합니다.)
 
version: '2'
services:
  zookeeper:
    container_name: local-zookeeper
    image: wurstmeister/zookeeper:3.4.6
    ports:
      - "2181:2181"
kafka
- https://github.com/wurstmeister/kafka-docker
 
version: '2'
services:
  kafka:
    container_name: local-kafka
    image: wurstmeister/kafka:2.12-2.3.0
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_CREATE_TOPICS: "test:1:1" # Topic명:Partition개수:Replica개수
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
environment!
KAFKA_CREATE_TOPICS: 생성할 topic 정보(Topic명:Partition개수:Replica개수)KAFKA_ZOOKEEPER_CONNECT: Zookeeper 정보KAFKA_ADVERTISED_HOST_NAME: 호스트KAFKA_ADVERTISED_PORT: 포트 번호
두개를 합친 docker-compose.yml
version: '2'
services:
  zookeeper:
    container_name: local-zookeeper
    image: wurstmeister/zookeeper:3.4.6
    ports:
      - "2181:2181"
  kafka:
    container_name: local-kafka
    image: wurstmeister/kafka:2.12-2.3.0
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_CREATE_TOPICS: "test_topic:1:1" # Topic명:Partition개수:Replica개수
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
실행
docker-compose -f docker-compose.yml up -d
종료
docker-compose down
or
docker-compose stop
docker!!
각 컨테이너 log 보기
- 각 설정값에 
image값을 logs 뒤에 넣어주면 된다. 
zookeeper
docker container logs local-zookeeper
kafka
docker container logs local-kafka
컨테이너 접속해보기
docker exec -i -t local-kafka bash
컨테이너 내부 topic log 보기
cd ./kafka/kafka-logs-/test_topic-
Kafka 로 접근해보기!!
- 공식사이트에서 위 docker-kafka 버전과 같은 kafka를 다운 받는다.
    
- 스칼라 : 2.12, 카프카 : 2.3.0
 - https://kafka.apache.org/downloads
 
 
설치
wget http://mirror.navercorp.com/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz
tar xzvf kafka_2.12-2.3.0.tgz
cd kafka_2.12-2.3.0
topic
- 옵션
    
--zookeeper: zookeeper가 실행 중인 호스트--list: 리스트--create: topic 생성--topic: topic 명--partitions: topic 파티션 수--replication-factor: topic 복사본 수
 
생성
bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic tmp_topic
- 위 명령어를 실행하면 topic 명 때문에 warning 이 발생한다.
 
WARNING: Due to limitations in metric names, topics with a period (‘.’) or underscore (‘_’) could collide. To avoid issues it is best to use either, but not both.
tmp_topic을tmp-topic으로 바꿔서 만들자!
확인
bin/kafka-topics.sh –zookeeper localhost:2181 –list
consumer
bin/kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic tmp-topic –from-beginning
- 위 명령어를 입력하고 새창을 하나 더 띄우자!
 
producer
bin/kafka-console-producer.sh –broker-list localhost:9092 –topic tmp-topic
- 무언가를 
producer에서 입력하게 되면consumer에 나오게 된다. 
추가
컨테이너 정지 및 제거
docker-compose -f docker-compose.yml stop && docker-compose -f docker-compose.yml rm -vf
참고링크
- https://github.com/Yelp/docker-compose
 - http://www.kwangsiklee.com/2017/03/docker-compose%EB%A1%9C-kafka%EB%A5%BC-%EB%A1%9C%EC%BB%AC%EC%97%90-%EB%9D%84%EC%9B%8C%EB%B3%B4%EC%9E%90/
 - https://blog.naver.com/PostView.nhn?blogId=occidere&logNo=221390946271&categoryNo=0&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView