카프카를 실행하기 위해 우선 주키퍼를 만들어준다.
주키퍼가 기동된 이후 카프카가 구동되도록 한다.
카프카 이미지가 여러개 있는데, 그 중 컴포즈 파일에서 초기 토픽 생성을 할 수 있도록 해주는 이미지를 사용하였다.
(구글링해서 나오는 카프카 예제 중 상당수가 해당 이미지를 사용하고 있어서..)
다음 내용처럼 docker-compose 파일을 작성한다.
서비스 구성은 zookeeper, kafka, kafka-manager 이고, 적절히 healthcheck를 하도록 하였다.
kafka 는 초기 구동시 토픽 mytopic1, mytopic2 를 생성하도록 하였다.
version: '2.4'
networks:
kafka_network:
services:
zookeeper:
image: zookeeper:3.4.14
container_name: zookeeper
hostname: zookeeper.myserver.com
ports:
- 2181:2181
environment:
SERVER_JVMFLAGS: -Xmx256m
ZOO_LOG4J_PROP: "INFO,ROLLINGFILE,CONSOLE"
healthcheck:
test: nc -z localhost 2181 || exit 1
interval: 30s
timeout: 5s
retries: 5
start_period: 10s
networks:
- kafka_network
kafka:
image: wurstmeister/kafka:2.13-2.6.0
container_name: kafka
hostname: kafka.myserver.com
ports:
- 9092:9092
- 9093:9093
expose:
- 9082
environment:
KAFKA_HEAP_OPTS: "-Xms128m -Xmx256m"
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9082,OUTSIDE://kafka.myserver.com:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://0.0.0.0:9082,OUTSIDE://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
KAFKA_CREATE_TOPICS: "mytopic1:4:1,mytopic2:4:1"
KAFKA_HEAP_OPTS: "-Xmx256m -Xms256m"
JMX_PORT: 9093
KAFKA_JMX_OPTS: -Dlog4j.logger.org.apache.kafka.common.network.Selector=ERROR
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=kafka.myserver.com
-Dcom.sun.management.jmxremote.rmi.port=9393
-Djava.net.preferIPv4Stack=true
depends_on:
zookeeper:
condition: service_healthy
healthcheck:
test: nc -z localhost 9092 || exit 1
interval: 30s
timeout: 5s
retries: 5
start_period: 10s
networks:
- kafka_network
cmak:
image: hlebalbau/kafka-manager:stable
restart: always
command:
- "-Dcmak.zkhosts=zookeeper:2181"
- "-DbasicAuthentication.enabled=true"
- "-DbasicAuthentication.username=admin"
- "-DbasicAuthentication.password=password"
ports:
- 9000:9000
depends_on:
zookeeper:
condition: service_healthy
networks:
- kafka_network
컨테이너를 실행하면 다음과 같이 잘 동작하는 것을 볼 수 있다.
이제 kafka-manager에서 kafka 설정을 하도록 하자.
cmak에서 포트를 9000으로 하였으니, 컨테이너를 구동한 호스트의 해당 포트로 접속한다.
접속정보는 컴포즈 파일을 보면 admin/password 로 설정하였으니, 해당 정보로 접속을 하자.
초기에는 다음과 같이 카프카 정보를 볼 수 없으므로, 관리 대상 카프카 정보로 클러스터를 생성하여 준다.
[Cluster -> Add Cluster 메뉴를 사용한다.]
만일 클러스터 목록을 추가하는 과정에서 다음과 같은 에러가 발생할 경우에는 주키퍼 콘솔을 통해 kafka-manager에서 사용할 공간을 직접 생성해 준 후, kafka-manager를 재기동한다.
Yikes! KeeperErrorCode = Unimplemented for /kafka-manager/mutex Try again.
$ zkCli.sh
create /kafka-manager/mutex ""
create /kafka-manager/mutex/locks ""
create /kafka-manager/mutex/leases ""
Kafka-manager가 재기동 된 후 다시 웹페이지에 접속해보면 다음과 같이 카프카 브로커의 정보를 확인할 수 있다.
참조 자료
CMAK repo : https://github.com/yahoo/CMAK
CMAK docker image : https://github.com/hleb-albau/kafka-manager-docker
CMAK (Kafka manager) 에 대한 개요 및 사용 방법 : https://server-engineer.tistory.com/759
Kafka-manager mutex 관련 에러 발생 처리 : https://github.com/occidere/TIL/issues/163
방문해 주셔서 감사합니다!
정보가 도움이 되셨다면
로그인하지 않아도 누룰 수 있는
아래의 ♡(좋아요)를 꾹~ 눌러주세요 ♥♥♥