관리 메뉴

피터의 개발이야기

[kafka] docker compose로 kafka cluster 구성 및 kafka-ui 모니터링 본문

DevOps/kafka

[kafka] docker compose로 kafka cluster 구성 및 kafka-ui 모니터링

기록하는 백앤드개발자 2024. 3. 14. 18:30
반응형

ㅁ 들어가며

ㅇ kafka를 테스트하려고 docker로 kafka를 띄우는 과정을 정리하였다. 

ㅇ 가장 경량화된 구성으로 kafka와 분산저장소인 zookeeper, 모니터링을 위한 kafka-ui를 docker-compose로 구성하였다.

 

# 개념
ㅇ Kafka-ui란?

# 설치
ㅇ docker-compose.yml 작성
ㅇ docker-compose 실행
ㅇ 컨테이너 확인
ㅇ kafka-ui 접속 확인
ㅇ kafka 컨테이너 접속

# 토픽 관리
ㅇ 토픽 생성, 조회, 삭제
ㅇ Kafka UI - 토픽 생성
ㅇ Kafka UI - 토픽 상세조회
ㅇ Kafka UI - 토픽 삭제

# Message 발행 및 Consumer 
ㅇ Consumer 생성 및 Message 발생
ㅇ Kafka UI - Produce Message
ㅇ Kafka UI - consumer 정보 확인

 

 

ㅁ Kafka-ui란?

 Kafka UI는 Apache Kafka® 클러스터를 관리하기 위한 빠르고 가벼운 다목적 웹 UI이다. 이 앱은 개발자를 위해 만들어졌고, Apache Kafka 클러스터를 모니터링하고 관리하기 위한 무료 오픈 소스 웹 UI이다. Apache Kafka용 UI는 데이터 흐름을 관찰 가능하게 만들고 문제를 더 빠르게 찾아서 해결하며 최적의 성능을 제공하는 간단한 도구이다. 경량 대시보드를 사용하면 Kafka 클러스터의 주요 지표(브로커, 주제, 파티션, 생산 및 소비)를 쉽게 추적할 수 있다.

  출처: https://docs.kafka-ui.provectus.io/

  kafka-ui 공식문서를 통해 개발과 사용법에 대한 자세한 정보를 알 수 있다.

 

kafka 정리 잘되어 있는 곳=> honglab - [Kafka] 카프카 개요

 

# 설치


ㅁ docker-compose.yml 작성

services:
  zookeeper:
    image: bitnami/zookeeper:latest
    container_name: zookeeper
    ports:
      - 2181:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  kafka:
    image: bitnami/kafka:latest
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
      - 9094:9094
    environment:
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_ENABLE_KRAFT=no
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    container_name: kafka-ui
    depends_on:
      - kafka
    ports:
      - 8080:8080
    environment:
      - DYNAMIC_CONFIG_ENABLED=true
      - KAFKA_CLUSTERS_0_NAME=peters_kafka
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092

 ㅇ workspace 폴더를 정하고 docker-compose.yml을 작성한다.

 

ㅁ UI for Apache kafka 환경변수

yml 파일의 각 변수를 환경 변수로 설정할 수 있습니다. 예를 들어 환경 변수를 사용하여 Cluster의 name을 설정하려면 KAFKA_CLUSTERS_0_NAMEd에 peters_kafka로 작성할 수 있습니다.

KEY DESC
SERVER_SERVLET_CONTEXT_PATH URI basePath
LOGGING_LEVEL_ROOT Setting log level (trace, debug, info, warn, error). Default: info
LOGGING_LEVEL_COM_PROVECTUS Setting log level (trace, debug, info, warn, error). Default: debug
SERVER_PORT Port for the embedded server. Default: 8080
KAFKA_ADMIN-CLIENT-TIMEOUT Kafka API timeout in ms. Default: 30000
KAFKA_CLUSTERS_0_NAME Cluster name
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS Address where to connect
KAFKA_CLUSTERS_0_ZOOKEEPER Zookeeper service address
KAFKA_CLUSTERS_0_KSQLDBSERVER KSQL DB server address
KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL Security protocol to connect to the brokers. For SSL connection use "SSL", for plaintext connection don't set this environment variable
KAFKA_CLUSTERS_0_SCHEMAREGISTRY SchemaRegistry's address
KAFKA_CLUSTERS_0_SCHEMAREGISTRYAUTH_USERNAME SchemaRegistry's basic authentication username
KAFKA_CLUSTERS_0_SCHEMAREGISTRYAUTH_PASSWORD SchemaRegistry's basic authentication password
KAFKA_CLUSTERS_0_SCHEMANAMETEMPLATE How keys are saved to schemaRegistry
KAFKA_CLUSTERS_0_JMXPORT Open jmxPosrts of a broker
KAFKA_CLUSTERS_0_READONLY Enable read-only mode. Default: false
KAFKA_CLUSTERS_0_DISABLELOGDIRSCOLLECTION Disable collecting segments information. It should be true for confluent cloud. Default: false
KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME Given name for the Kafka Connect cluster
KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS Address of the Kafka Connect service endpoint
KAFKA_CLUSTERS_0_JMXSSL Enable SSL for JMX? true or false. For advanced setup, see kafka-ui-jmx-secured.yml
KAFKA_CLUSTERS_0_JMXUSERNAME Username for JMX authentication
KAFKA_CLUSTERS_0_JMXPASSWORD Password for JMX authentication

 

ㅁ docker-compose 실행

$ docker-compose -f docker-compose.yml up -d

 ㅇ -d은 백그라운드 실행이다.

 ㅇ 관련 이미지를 다운로드 받고 있다.

 

ㅁ 컨테이너 확인

$ docker ps

 

ㅁ kafka-ui 접속 확인

ㅇ 로컬의 8080포트로 접속하였다. 클러스터가 정상적으로 작동하고 있다.

ㅇ 이제부터는 토픽을 생성해 보고 모니터링해 보도록 하자.

 

ㅁ kafka 컨테이너 접속

# kafka 컨테이너로 접속
$ docker exec -it kafka /bin/bash

# kafka 컨테이너에는 다음과 같은 kafka를 사용하기 위한 shell을 제공한다. (ka 타이핑 후 탭)
$ I have no name!@23b66264a786:/$ kafka-
kafka-acls.sh                       kafka-delegation-tokens.sh          kafka-metadata-quorum.sh            kafka-storage.sh
kafka-broker-api-versions.sh        kafka-delete-records.sh             kafka-metadata-shell.sh             kafka-streams-application-reset.sh
kafka-client-metrics.sh             kafka-dump-log.sh                   kafka-mirror-maker.sh               kafka-topics.sh
kafka-cluster.sh                    kafka-e2e-latency.sh                kafka-producer-perf-test.sh         kafka-transactions.sh
kafka-configs.sh                    kafka-features.sh                   kafka-reassign-partitions.sh        kafka-verifiable-consumer.sh
kafka-console-consumer.sh           kafka-get-offsets.sh                kafka-replica-verification.sh       kafka-verifiable-producer.sh
kafka-console-producer.sh           kafka-jmx.sh                        kafka-run-class.sh
kafka-consumer-groups.sh            kafka-leader-election.sh            kafka-server-start.sh
kafka-consumer-perf-test.sh         kafka-log-dirs.sh                   kafka-server-stop.sh

ㅇ shell에 대한 자세한 내용은 https://github.com/apache/kafka/tree/trunk/bin에서 확인할 수 있다.

 

ㅇ shell을 통해 토픽을 생성, 조회, 삭제 방법을 정리하였다.

 

 

# 토픽 관리


ㅁ 토픽 생성, 조회, 삭제

# 토픽 생성문
$ kafka-topics.sh --create --topic topic1 --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3

APACHE KAFKA QUICKSTART : kafka에서 공식적으로  kafka 설명 동영상 및 토픽 생성과정이 제공됨.

ㅇ topic1으로 토픽을  생성하였다.

 

###### topic chk!!  #######
$ kafka-topics.sh --list --bootstrap-server localhost:9092
topic1

###### topic detail!! ######
$ kafka-topics.sh --describe --topic topic1 --bootstrap-server kafka:9092
Topic: topic1	TopicId: TO3wwtSuSB6zsBOkDf5hjQ	PartitionCount: 3	ReplicationFactor: 1	Configs:
	Topic: topic1	Partition: 0	Leader: 1001	Replicas: 1001	Isr: 1001
	Topic: topic1	Partition: 1	Leader: 1001	Replicas: 1001	Isr: 1001
	Topic: topic1	Partition: 2	Leader: 1001	Replicas: 1001	Isr: 1001

##### topic delete ######
$ kafka-topics.sh --delete --bootstrap-server kafka:9092 --topic topic1

###### topic delete chk!!  #######
$ kafka-topics.sh --list --bootstrap-server localhost:9092

# 다시 생성
$ kafka-topics.sh --create --topic topic1 --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3
Created topic topic1.
$ kafka-topics.sh --list --bootstrap-server localhost:9092
topic1

 

ㅁ Kafka UI - 토픽 생성

ㅇ ui를 통해 토픽 생성 확인

+ Add a Topic 클릭 

ㅇ 기본저긍로 replica=1, partition=1로 생성함.

ㅇ 생성 후 상세 페이지로 이동됨.

 

ㅁ Kafka UI - 토픽 상세조회

 

ㅁ Kafka UI - 토픽 삭제

 

 

 

 

 

# Message 발행 및 Consumer 


 

ㅁ Consumer 생성 및 Message 발생

# producer에서 메시지를 발행하면
$ kafka-console-producer.sh --topic topic1 --broker-list kafka:9092
>test topic
>test 2

# consumer에서 메시지를 수신한다.
$ kafka-console-consumer.sh --topic topic1 --bootstrap-server kafka:9092
test topic
test 2

 

ㅁ Kafka UI - Produce Message 

ㅇ 두개의 메시지 발생

ㅇ consumer에서 수신된다.

 

 Kafka UI - consumer 정보 확인

ㅇ UI에서도 consumer의 처리 정보를 확인할 수 있다.

 

ㅁ 테스트 후 리소스 정리

$ docker-compose -f docker-compose.yml down

 

ㅁ 함께 보면 좋은 사이트

공식 홈 - UI for Apache Kafka

ㅇ kafka 정리 잘되어 있는 곳=> honglab - [Kafka] 카프카 개요

[Docker] Docker desktop + kafka + zookeeper + kafka ui
[kafka/Docker] 도커로 카프카를 띄워보고, 토픽 생성 후 메시지를 보내보자.

반응형
Comments