์ด์ ํฌ์คํ ์์ ๊ฐ๋จํ API ๊ตฌ์ถ ํ ์คํธ๋ฅผ ์๋ฃํ๋ค.
0. Kafka ๊ฐ๋ ๊ณต๋ถํ๊ธฐ
1. docker-compose๋ก Kafka ํด๋ฌ์คํฐ ๊ตฌ์ถํ๊ธฐ
์ด์ ์ค์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ณ ์ ์ฅํ ์ ์๋๋ก Kafka๋ฅผ docker-compose๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ถํด๋ณด์๋ค.
kafka broker 3๊ฐ, zookeeper 3๊ฐ๋ก ์ธ์คํด์ค๋ฅผ ์ฌ๋ ค ์งํํ๋ค.
| docker-compose.yml
version: '2'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:latest
ports:
- "12181:2181"
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888
zookeeper-2:
image: confluentinc/cp-zookeeper:latest
ports:
- "22181:2181"
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888
zookeeper-3:
image: confluentinc/cp-zookeeper:latest
ports:
- "32181:2181"
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: zookeeper-1:12888:13888;zookeeper-2:22888:23888;zookeeper-3:32888:33888
kafka-1:
image: confluentinc/cp-kafka:latest
ports:
- "19092:19092"
- "19094:19094"
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_LISTENERS: INTERNAL://kafka-1:19092,EXTERNAL://kafka-1:19094
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:19092,EXTERNAL://localhost:19094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_JMX_PORT: 9999
kafka-2:
image: confluentinc/cp-kafka:latest
ports:
- "29092:29092"
- "29094:29094"
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_LISTENERS: INTERNAL://kafka-2:29092,EXTERNAL://kafka-2:29094
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29092,EXTERNAL://localhost:29094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_JMX_PORT: 9999
kafka-3:
image: confluentinc/cp-kafka:latest
ports:
- "39092:39092"
- "39094:39094"
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_LISTENERS: INTERNAL://kafka-3:39092,EXTERNAL://kafka-3:39094
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:39092,EXTERNAL://localhost:39094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_JMX_PORT: 9999
2. Kafka ๋ชจ๋ํฐ๋ง?
Kafka ๋ธ๋ก์ปค๋ฅผ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ค์ํ ํด๋ค์ด ์กด์ฌํ๋ค.
์ด๋ค ํด์ ์ฌ์ฉํ์ฌ ๋ชจ๋ํฐ๋ง ํ ์ ์๋๋ก ๊ตฌ์ถํด๋ณผ๊น?
Kafka ๋ชจ๋ํฐ๋ง์ ๋ํด ๊ฒ์ํด๋ณด๋ฉด Kafka UI Tool์ ์ฌ์ฉํ๋ ๊ธ๋ค์ด ๋ง์๋๋ฐ, Kafka ๋ฉํธ๋ฆญ์ ํตํด ์ข ๋ ์๊ฐ์ ์ผ๋ก ํํํ ์ ์๋ ๊ฒ ๋ค์ํ์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ๋ ํ์ ์ ์ฐ์ผ ๊ฒ ๊ฐ์(?) Prometheus์ Grafana๋ฅผ ์ฌ์ฉํด ํจ๊ป ๊ตฌ์ถํด๋ณด์๋ค.
(Kafka์ ๊ฐ์ด prometheus์ grafana๋ฅผ docker-compose๋ก ๊ตฌ์ถํ๋ ์ฝ๋๋ฅผ ์ฐพ์ง ๋ชปํด์ ๋ ๋์ ์ ์ผ๋ก ์ ์ฉํด๋ณด๊ณ ์ถ์๋ ๊ฒ๋ ์๋ค ใ ใ )
| prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus:9090']
- job_name: 'kafka'
static_configs:
- targets: ['kafka-exporter:9308']
| docker-compose.yml
์์์ ์์ฑํ docker-compose.yml์ ์ถ๊ฐ๋ก ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ ๊ตฌ์ถํ๋ฉด ๋๋ค.
kafka-exporter:
image: danielqsj/kafka-exporter:latest
ports:
- "9308:9308"
command: ["--kafka.server=kafka-1:19092", "--kafka.server=kafka-2:29092", "--kafka.server=kafka-3:39092"]
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
depends_on:
- kafka-1
- kafka-2
- kafka-3
- kafka-exporter
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
depends_on:
- kafka-1
- kafka-2
- kafka-3
- prometheus
- kafka-exporter
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
prometheus์์ ์ฌ์ฉํ kafka ๋ฉํธ๋ฆญ์ ์์งํ๋ ์ญํ ์ธ kafka-exporter, ๋ชจ๋ํฐ๋ง ๋ฐ ๋ฉํธ๋ฆญ ์์ง ์ญํ ์ธ prometheus, ๋ฐ์ดํฐ ์์ง ๋ฐ ์๊ฐํ ์ญํ ์ธ grafana๋ก ๊ตฌ์ฑํ๋ค.
ADD: kafka ๋ฐ ๋ชจ๋ํฐ๋ง์ฉ prometheus, grafana docker-compose ๊ตฌ์ถ · Lee-SungMin/LOL_Data_Pipeline@4cc6381
Lee-SungMin committed Oct 27, 2023
github.com
๋ช ๋ น์ด๋ฅผ ํตํด kafka ๊ตฌ์ฑ์ ์ํ ์ฌ๋ฌ ์ปจํ ์ด๋๋ค์ ํ ๋ฒ์ ๋์๋ณด์๋ค.
๋ชจ๋ ์ปจํ ์ด๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋จ์ ํ์ธํ๋ค.
3. Prometheus ํ์ธํ๊ธฐ
Prometheus ๊ฐ์ ๊ฒฝ์ฐ, ํฌํธ๋ฅผ 9090์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ฃผ์๋ก ์ ๊ทผํ๋ค.
์์ ํญ์์ Status > Targets๋ฅผ ํด๋ฆญํ๋ฉด, ์๋์ ๊ฐ์ด ๋์๋ณด๋๋ฅผ ํ์ธํ ์ ์๋ค.
4. Kafka ํด๋ฌ์คํฐ ๊ตฌ์ฑ ํ ์คํ
Kafka ํด๋ฌ์คํฐ๊ฐ ๊ตฌ์ฑ์ด ์๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด, ํฐ๋ฏธ๋์ ํตํด ์นดํ์นด ์ปจํ ์ด๋ 2๊ฐ์ ์ ์ํ๋ค.
Kafka-1 ํด๋ฌ์คํฐ์ ์ ์ํ์ฌ, test1 ์ด๋ผ๋ ํ ํฝ์ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ๊น์ง ์์ฑ๋ Kafka ํ ํฝ ๋ชฉ๋ก์ ํ์ธํ๋ ๋ช ๋ น์ด๋ก, test1์ด๋ผ๋ ํ ํฝ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ํ ์์ ๋ช ๋ น์ด๋ฅผ ํตํด ์์ฑํ ํ ํฝ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
๊ทธ ๋ค์ ๋ค๋ฅธ ํฐ๋ฏธ๋ ์ฐฝ์ผ๋ก Kafka-3 ํด๋ฌ์คํฐ์ ์ ์ํ๋ค.
test1 ํ ํฝ์ ๋ด์ฉ์ producer๋ฅผ ์ฌ์ฉํด produceํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ Kafka-1 ํด๋ฌ์คํฐ๋ฅผ ๋์ด ํฐ๋ฏธ๋๋ก ๋์๊ฐ consumer๋ฅผ ์ฌ์ฉํด ํ ํฝ ๋ด์ฉ์ ๋ฐ์์ค๋๋ก ๋ช ๋ น์ด๋ฅผ ์์ฑํ๋ค.
beginning ์ต์ ์ ์ฌ์ฉํ์ฌ ์ฒซ data๋ถํฐ ์ฝ์ด์๋ค.
์ด๋ก์ Kafka ํ ํฝ์ ๋ณด๋ด๊ณ ์ฝ์ด์ค๋ ๊ณผ์ ์ด ์ ์งํ๋จ์ ํ์ธํ ์ ์์๋ค.
(Kafka-1,3 ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋ธ๋ก์ปค๋ผ๋ฆฌ ํด๋น ๊ณผ์ ๋ค์ด ์ ์๋ํด์ผ ํ๋ค.)
4. Grafana ๋์๋ณด๋ ํ์ธํ๊ธฐ
grafana์ ํฌํธ ๋ฒํธ์ธ 3000๋ฒ์ผ๋ก ๊ฒฝ๋ก์ ๋ง๊ฒ ์น ํ์ด์ง๋ฅผ ์ ์ํ๋ฉด admin ํ์ด์ง๋ก ์ฐ๊ฒฐ๋๊ณ , ์์ด๋ ๋ฐ ๋น๋ฒ์ admin์ผ๋ก ๋ก๊ทธ์ธํ๋ค.
๋์๋ณด๋๋ ์ํฉ์ ๋ง๊ฒ ์ํ๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋๋ก ์ง์ ๊ตฌํํ๋ ๊ฒ ์ข์๋ฐ, ์ฒ์ ์ ๊ทผํ๋ ๊ฑฐ๋ผ ์์ง ๋ฏธ์ํด์ ๋์๋ณด๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
kafka-exporter ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ๊ณณ์์ ๋์๋ณด๋๋ ํจ๊ป ๊ณต์ ํ๊ธธ๋ ์ฌ์ฉํด๋ณด์๋ค.
GitHub - danielqsj/kafka_exporter: Kafka exporter for Prometheus
Kafka exporter for Prometheus. Contribute to danielqsj/kafka_exporter development by creating an account on GitHub.
github.com
Kafka Exporter Overview | Grafana Labs
Thank you! Your message has been received!
grafana.com
Dashboard > New > Import๋ฅผ ํด๋ฆญํ๊ณ , ํ ๋ธ๋ฆฟ ID์ธ 7589๋ฅผ ์ ๋ ฅํ์ฌ Loadํด์ ์ฌ์ฉํ๋ค.
๋์๋ณด๋๋ฅผ ํตํด, ์์์ ๋ง๋ Kafka ํ ํฝ์ ๋ํด ๋์๋ณด๋๋ฅผ ํตํด ์๊ฐ์ ์ผ๋ก ํ์ธํ ์ ์๋ค.
(๋์๋ณด๋๊ฐ ์์ฒญ ์๋ ์ ๋ง๋ ๋ฒ์ ์ด๋ผ ํ์ํ ์ ๋ณด์ ๋ง๊ฒ ์์ ํด์ผ ํ ๊ฒ ๊ฐ๋ค.)
์ด์ Kafka๋ฅผ ํตํด ๋ ๋ค์ํ ๋์๋ค์ด ์ด๋ฃจ์ด์ง๋๋ก ๊ตฌํํด์ ๋์๋ณด๋๋ฅผ ํตํด ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.
*์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ ์๋ฃ๋ค
[Kafka] Docker Compose๋ก ๋ฉํฐ๋ธ๋ก์ปค Kafka ๊ตฌ์ฑํ๊ธฐ
devocean.sk.com
Docker-compose๋ก Prometheus + Grafana ์ค์น
Docker-compose ๋ฐฐ๊ฒฝ ์ค๋ช ์ผ๋ฐ์ ์ผ๋ก prometheus๋ Grafana๋ฅผ ์ค์นํ๋ค๊ณ ํ๋ฉด, docker full๋ก ์ด๋ฏธ์ง๋ฅผ ๋ก๊ฒจ์์ ์ค์นํ๋ ๊ฒ ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง, container๊ฐ ๋ค์ ๊ฐ๊ฐ ๋ ๊ฒฝ์ฐ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง๋ค. ๊ทธ๋
countrymouse.tistory.com
[Kafka Monitoring] Prometheus & Grafana
๊ฐ๋ฐ์๋ฒ์ ๊ตฌ์ถ๋ Kafka 3 Node Cluster์ ๋ค์ํ ์ ๋ณด๋ฅผ ๋์๋ณด๋๋ก ์๊ฐํํ๊ธฐ ์ํด Prometheus๋ก Kafka ์ ๋ณด๋ฅผ ๊ธ์ด์ค๊ณ ํด๋น ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ ์์ค๋ก ์ฌ์ฉํ์ฌ Grafana ๋์๋ณด๋๋ก ํ์ถํ์ต๋๋ค. Prometheus
mj-sunflower.tistory.com
[Kubernetes] Grafana ์์ Kafka ๋ชจ๋ํฐ๋ง ํ๊ธฐ #Prometheus #kafka-exporter
[Kubernetes] Grafana์์ Kafka ๋ชจ๋ํฐ๋งํ๊ธฐ Kubernetes ์์ PLG ์คํ ์ฌ์ฉํด๋ณด๊ธฐ ๋ผ๋ ์ฃผ์ ๋ก ์๋ 10์์ฏค์ ํฌ์คํ ์ ์์ฑํ์์ต๋๋ค. ๊ทธ๋์ ํ์์์งํ ํ๋ ํ๋ก์ ํธ์๋ ๋ง์ ๋ณํ๊ฐ ์์๋๋ฐ Kafka
ksr930.tistory.com
'๊ฐ๋ฐ ์ผ์ง > [LOL Data Pipeline ๊ตฌ์ถํ๊ธฐ]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4. ์ ์ ๋ณด๋ฅํฉ๋๋ค. (0) | 2023.10.26 |
---|---|
2. ์ํ์ฌ๋ช ๊ฒ์์ผ๋ก ์ ๋ณด ๊ฐ์ ธ์ค๋ API ๊ตฌํํ๊ธฐ (0) | 2023.10.24 |
1. Riot API ์ ์ฒญ & Spring Boot ํ๋ก์ ํธ ์์ฑ (0) | 2023.10.17 |