일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS EKS
- kotlin coroutine
- IntelliJ
- 티스토리챌린지
- Java
- 정보처리기사실기 기출문제
- 정보처리기사 실기
- AI
- mysql 튜닝
- Kubernetes
- 공부
- CKA
- Linux
- aws
- kotlin
- kotlin spring
- 기록으로 실력을 쌓자
- APM
- CloudWatch
- MySQL
- PETERICA
- Pinpoint
- CKA 기출문제
- 정보처리기사 실기 기출문제
- kotlin querydsl
- Elasticsearch
- 코틀린 코루틴의 정석
- Spring
- 오블완
- minikube
- Today
- Total
피터의 개발이야기
[kafka] docker compose로 kafka cluster 구성 및 kafka-ui 모니터링 본문
[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
ㅁ 함께 보면 좋은 사이트
ㅇ kafka 정리 잘되어 있는 곳=> honglab - [Kafka] 카프카 개요
ㅇ [Docker] Docker desktop + kafka + zookeeper + kafka ui
ㅇ [kafka/Docker] 도커로 카프카를 띄워보고, 토픽 생성 후 메시지를 보내보자.
'DevOps > kafka' 카테고리의 다른 글
[kafka] Kafka 클러스터 모니터링 UI 도구들 (0) | 2024.03.20 |
---|---|
분산 시스템에서 데이터를 전달하는 효율적인 방법은? (feat. Kafka란) (0) | 2024.03.18 |
[kafka] kafka 모니터링 docker 환경 세팅 (0) | 2024.03.17 |
[kafka] kafka 모니터링 방법 공부 (docker 컨테이너 생성, M1 칩 no specific platform 오류를 colima로 해결) (0) | 2024.03.17 |