Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- vectorDB
- Python
- aiagent
- RAG
- dockercompose
- Dag
- sparkstreaming
- spark
- prometheus
- 루프백주소
- pySpark
- metadabatase
- hadoop
- 설치
- docker
- airflow
- ubuntu
- jmx-exporter
- kafka
- BigQuery
- milvus
- Streamlit
- grafana
- Redshift
- javascript
- 오블완
- SQL
- MSA
- airflow설치
- amazonlinux
Archives
- Today
- Total
데이터 노트
[Docker Compose] Kafka-Prometheus-Grafana 브로커/exporter 컨테이너 올라오지 않는 오류 본문
Data Engineering/Docker
[Docker Compose] Kafka-Prometheus-Grafana 브로커/exporter 컨테이너 올라오지 않는 오류
돌돌찐 2024. 6. 5. 23:49문제 상황
docker-compose.yml 파일을 생성했다.
그리고 컨테이너를 올리는데 kafka 브로커 3개와 jmx-exporter 3개 다 안 올라왔다.
오류 찾기 & 해결 과정
- 실패한 컨테이너 오류 확인
- 오류 원인
- 브로커 컨테이너 : KAFKA_HEAP_OPTS 환경 변수를 제대로 인식하지 못해서 발생하는 문제
- jmx-exporter 컨테이너 : JVM_OPTS 메모리 환경 변수 인식 오류
- 해결
- 브로커 컨테이너 설정
- 기존 : KAFKA_HEAP_OPTS: "${KAFKA_BROKER_HEAP_OPTS:-'-Xmx1G'}"
- 변경 : KAFKA_HEAP_OPTS: “-Xmx1G"
- jmx-exporter 컨테이너 설정
- 기존 : JVM_OPTS: "${PROMETHEUS_JMX_AGENT_JVM_OPTS:-'-Xmx128m'}"
- 변경 : JVM_OPTS: "-Xmx128m"
- 브로커 컨테이너 설정
해결 완료
최종 docker-compose.yml
services:
grafana:
image: "grafana/grafana:9.4.7"
ports:
- "3100:3000"
environment:
GF_PATHS_DATA: /var/lib/grafana
GF_SECURITY_ADMIN_PASSWORD: {password}
volumes:
- ./grafana/provisioning:/etc/grafana/provisioning
- ./grafana/dashboards:/var/lib/grafana/dashboards
container_name: grafana
depends_on:
- prometheus
prometheus:
image: "bitnami/prometheus:latest"
ports:
- "9091:9090"
volumes:
- {path}/etc/prometheus:/etc/prometheus
command: "--config.file=/etc/prometheus/prometheus.yml"
container_name: prometheus
jmx-kafka101:
image: "sscaling/jmx-prometheus-exporter"
ports:
- "5556:5556"
environment:
CONFIG_YML: "/etc/jmx_exporter/config.yml"
JVM_OPTS: "-Xmx128m"
volumes:
- ./etc/jmx_exporter/config_kafka101.yml:/etc/jmx_exporter/config.yml
container_name: jmx-kafka101
depends_on:
- kafka101
jmx-kafka102:
image: "sscaling/jmx-prometheus-exporter"
ports:
- "5557:5556"
environment:
CONFIG_YML: "/etc/jmx_exporter/config.yml"
JVM_OPTS: "-Xmx128m"
volumes:
- ./etc/jmx_exporter/config_kafka102.yml:/etc/jmx_exporter/config.yml
container_name: jmx-kafka102
depends_on:
- kafka102
jmx-kafka103:
image: "sscaling/jmx-prometheus-exporter"
ports:
- "5558:5556"
environment:
CONFIG_YML: "/etc/jmx_exporter/config.yml"
JVM_OPTS: "-Xmx128m"
volumes:
- ./etc/jmx_exporter/config_kafka103.yml:/etc/jmx_exporter/config.yml
container_name: jmx-kafka103
depends_on:
- kafka103
zk1:
image: confluentinc/cp-zookeeper:7.4.1
environment:
ZOOKEEPER_CLIENT_PORT: 2182
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- "2182:2181"
container_name: zookeeper1
kafka101:
image: confluentinc/cp-kafka:7.4.1
depends_on:
- zk1
ports:
- "9095:9092"
- "9995:9991"
container_name: kafka101
environment:
KAFKA_BROKER_ID: 101
KAFKA_JMX_PORT: 9991
KAFKA_ZOOKEEPER_CONNECT: zk1:2182
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka101:29092,PLAINTEXT_HOST://localhost:9095
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: kafka101:29092
CONFLUENT_METRICS_REPORTER_ZOOKEEPER_CONNECT: zk1:2182
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
KAFKA_HEAP_OPTS: "-Xmx1G"
deploy:
resources:
limits:
memory: "1G"
kafka102:
image: confluentinc/cp-kafka:7.4.1
depends_on:
- zk1
ports:
- "9096:9092"
- "9996:9992"
container_name: kafka102
environment:
KAFKA_BROKER_ID: 102
KAFKA_JMX_PORT: 9992
KAFKA_ZOOKEEPER_CONNECT: zk1:2182
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka102:29092,PLAINTEXT_HOST://localhost:9096
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: kafka102:29092
CONFLUENT_METRICS_REPORTER_ZOOKEEPER_CONNECT: zk1:2182
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
KAFKA_HEAP_OPTS: "-Xmx1G"
deploy:
resources:
limits:
memory: "1G"
kafka103:
image: confluentinc/cp-kafka:7.4.1
depends_on:
- zk1
ports:
- "9097:9092"
- "9997:9993"
container_name: kafka103
environment:
KAFKA_BROKER_ID: 103
KAFKA_JMX_PORT: 9993
KAFKA_ZOOKEEPER_CONNECT: zk1:2182
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka103:29092,PLAINTEXT_HOST://localhost:9097
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: kafka103:29092
CONFLUENT_METRICS_REPORTER_ZOOKEEPER_CONNECT: zk1:2182
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
KAFKA_HEAP_OPTS: "-Xmx1G"
deploy:
resources:
limits:
memory: "1G"
추가 지식!
- heap
- 힙(heap)은 Java 가상 머신(JVM)에서 동적으로 할당되는 메모리 영역 중 하나.
- → 이 영역은 새로운 객체를 생성하고, 사용되지 않는 객체를 회수하는 가비지 컬렉션의 대상이 된다.
- 힙 크기는 JVM이 힙에 할당할 수 있는 최대 메모리 양.→ Error-2 보면 "-Xmx128m"
- -> -Xmx 옵션을 사용하여 JVM에 할당되는 힙의 최대 크기를 지정할 수 있으며, 이 값은 일반적으로 메가바이트 또는 기가바이트 단위로 지정된다.
- 힙 크기는 애플리케이션의 성능과 메모리 사용에 영향을 미친다.
- → 충분한 힙 공간을 할당하면 애플리케이션이 메모리 부족으로 인한 예외를 방지할 수 있지만, 너무 큰 힙을 할당하면 가비지 컬렉션의 오버헤드가 발생할 수 있어 적절한 힙 크기를 선택하는 것이 중요.
- -Xmx 옵션
- -X : JVM에게 전달되는 특별한 옵션
- mx : 최대 힙 크기 maximum heap size
드디어 그라파나 메인 화면을 볼 수 있게 되었다..
작은 전진.. 소확행
앞으로 여기에 잘 채워나가보자.
Ref.