카프카 운영과 모니터링 – 2가지

카프카 운영과 모니터링 – 2가지

카프카 운영 설정과 안정적인 운영을 위한 모니터링 설정 방법을 알아보도록 하겠습니다. 카프카는 안정적인 시스템으로 운영이 가능하나 혹시 모를 장애 예방을 위해 카프카 서버를 감시할 대시보드 형태의 모니터링 툴이 필요합니다.

1. 안정적인 카프카 운영을 위한 주키퍼와 카프카 구성

1) 주키퍼 구성

  • 주키퍼의 역할이 축소되고 있음.
  • 주키퍼 서버 수량
    • 과반수 방식이므로 반드시 홀수로 보통 서버는 3대로 구성함.
    • 3대로 구성하면 1대의 장애는 허용함.
    • 핵심 중앙 데이타 파이프라인으로 구성할 경우는 5대로 권장함.
  • 주키퍼 하드웨어
    • 메모리 4~8GB, 디스크 240GB 또는 480GB SSD 추천.
    • 힙메모리 크기 1~2GB, 나머지는 운영체제 OS 영역으로 사용.
    • 과도한 물리 메모리 장착은 메모리 낭비하는 일임.
    • SAS 디스크보다는 쓰기 성능이 좋은 SSD 디스크를 추천
  • 주키퍼 배치
    • 반드시 물리적으로 분산 배치해야 함.
    • AWS 설치할 경우 가용 영역을 2, 3개로 하여 구축 권장.

2) 카프카 운영을 위한 안정적인 구성

  • 카프카 서버 수량
    • 3대의 서버가 가정 적당함.
  • 카프카 하드웨어
    • CPU 사용률이 높음. 코어수가 많은 CPU 권장.
    • JVM 힙 크기 : 6GB 정도로 큰 메모리가 필요함.
    • 최소 32GB, 권장은 128GB, 256GB 추천.
    • SATA를 사용해도 되지만 서버에 약 10대 정도의 디스크를 장착하는 것을 추천. 용량은 4TB 이상을 권장.
    • NAS를 사용하지 않는 것을 권장. NAS가 장애가 나면 전체 시스템이 장애남.
    • 네트워크 카드 : 10G 이더넷 카드 구성. 브로커 한대 당 네트워크 사용량 비율이 50% 넘지 않도록 분산해서 운영.
  • 카프카 배치
    • 반드시 물리적으로 분산 배치해야 함.
    • AWS 설치할 경우 가용 영역을 2, 3개로 하여 구축 권장.

2. 모니터링 시스템 구성

  • 대표적인 모니터링 방법
    • 애플리케이션 로그 분석
    • JMX를 이용해 브로커들의 메트릭 정보를 확인하는 방법

1) 애플리케이션으로서 카프카의 로그 관리와 분석

  • 카프카 애클리케이션에서 발생하는 모든 로그는 브로커의 로컬 디스크에 저장됨.
  • 카프카의 자바 기반의 로깅 유틸리티 log4j 로그 레벨
    • TRACE : DEBUG보다 상세한 로그를 기록.
    • DEBUG : 내부 애플리케이션 상황에 대한 로그를 기록함.(INFO 로그 레벨보다 상세)
    • INFO : 로그 레벨의 기본값. 일반적인 정보 수준의 로그.
    • WARN : INFO 로그 레벨보다 높은 개념으로 경고 수준의 로그를 기록.
    • ERROR : 경고 수준을 넘어 런타임 에러나 예상하지 못한 에러 로그를 기록.
    • FATAL : 로그 레벨 중 최종 단계이며, 심각한 오류로 인한 애플리케이션 중지 등의 로그를 기록.
# Check
cat /usr/local/kafka/config/log4j.properties

# 설정
vi /usr/local/kafka/config/log4j.properties
> log4j.logger.kafka=DEBUG
> log4j.logger.org.apache.kafka=DEBUG

# 설정 후 브로커 재시작
sudo systemctl restart kafka-server

# 로그 확인
cat /usr/local/kafka/logs/server.log
  • 로그 레벨 변경은 꼭 필요한 경우에만 수행함.
  • 카프카 애플리케이션의 로그 파일 종류와 역할
    • server.log : 브로커 설정 정보와 정보성 로그 등을 기록함. 브로커를 재시작하는 경우 브로커의 옵션 정보가 기록됨.
    • state-change.log : 컨트롤러로부터 받은 정보를 기록함.
    • kafka-request.log : 클라이언트로부터 받은 정보를 기록함.
    • log-cleaner.log : 로그 컴팩션 동작들을 기록함.
    • controller.log : 컨트롤러 관련 정보를 기록함.
    • kafka-authorizer.log : 인증과 관련된 정보를 기록함.

2) JMX를 이용한 카프카 메트릭 모니터링

  • JMX(Java Management eXtensions) : 자바로 만든 애플리케이션의 모니터링을 위한 도구를 제공하는 자바 API로 MBean(Managed Bean)이라는 객체로 표현됨.
  • 카프카 관리자는 JMX를 이용해 카프카의 주요 메트릭들을 그래프와 같은 형태로 한눈에 확인할 수 있음.
  • 방법은 JMX 포트를 오픈 후 JMX에서 제공하는 메트릭 정보를 관리자가 GUI 형태로 볼 수 있도록 구성.
  • 도구로 프로메테우스, 익스포터를 이용.
  • 카프카 JMX 설정 방법 # 설정 확인 cat /usr/local/kafka/config/jmx > JMX_PORT=9999 # 동작 확인 netstat -ntl | grep 9999
  • 프로메테우스 설치
    • 메트릭 기반 모니터링 시스템.
    • 대표적인 오픈소스 도구인 그라파나와 함께 통합 설치해서 사용.
# 도커 설치
sudo amazon-linux-extras install -y docker
sudo docker version

sudo service docker start
sudo usermod -a -G docker ec2-user

sudo yum install -y git
sudo chkconfig docker on
sudo reboot

# 프로메테우스 설치
sudo systemctl status docker
sudo mkdir -p /etc/prometheus

# prometheus config
global:
  scrape_interval:     5s
  evaluation_interval: 5s

scrape_configs:
  - job_name: 'peter-jmx-kafka'
    static_configs:
      - targets:
        - peter-kafka01.foo.bar:7071
        - peter-kafka02.foo.bar:7071
        - peter-kafka03.foo.bar:7071

  - job_name: 'peter-kafka-nodes'
    static_configs:
      - targets:
          - peter-kafka01.foo.bar:9100
          - peter-kafka02.foo.bar:9100
          - peter-kafka03.foo.bar:9100

  - job_name: 'peter-kafka-exporter'
    static_configs:
      - targets:
          - peter-kafka01.foo.bar:9308
          - peter-kafka02.foo.bar:9308
          - peter-kafka03.foo.bar:9308
sudo docker run -d --network host -p 9090:9090 -v /
etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus prom/
prometheus

Prometheus – Monitoring system & time series database

# 설치 확인
sudo docker ps
  • 그라파나 설치
# 설치
sudo docker run -d --network host -p 3000:3000 --name grafana grafana/grafana:7.3.7

# 설치 확인
sudo docker ps

Grafana: The open observability platform | Grafana Labs

  • 익스포터 설치
    • 프로메테우스의 모니터링 방식은 푸시 push가 아닌 풀 pull 방식이라 모니터링하고자 하는 대상 서버에 자신의 메트릭 정보를 보여줄 수 있는 익스포터(Exporter)를 설치해야 함.
    • 익스포터는 다양한 애플리케이션에서 수집되는 메트릭들을 프로메테우스가 인식할 수 있는 형태로 나타내는 에이전트임.
    • 익스포터를 설치 후 웹브라우저에서 https://pf-kakfa01.sample.test:9100/metrics 로 접근하며 다양한 메트릭 정보를 확인할 수 있음.
  • 프로메테우스에 모니터링할 대상 서버와 포트 정보를 프로메테우스 환경 설정 파일에 등록하면 주기적으로 대상 서버의 메트릭값을 가져와 자신의 데이타베이스에 저장함.
sudo mkdir -p /usr/local/jmx
sudo yum -y install git

sudo cp jmx_prometheus_httpserver-0.13.1-SNAPSHOT-jar-with-dependencies /usr/local/jmx

sudo cp jmx_prometheus_httpserver /usr/local/jmx

jmx_prometheus_httpserver-0.13.1-SNAPSHOT-jar-with-dependencies.jar.zip

#jmx_prometheus_httpserver.yml
hostPort: 127.0.0.1:9999
ssl: false
rules:
  - pattern: ".*"
  • JMX 익스포트 실행
#jmx-expoter.service 파일
[Unit]
Description=JMX Exporter for Kafka
After=kafka-server.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/java -jar /usr/local/jmx/jmx_prometheus_httpserver-0.13.1-SNAPSHOT-jar-with-dependencies.jar 7071 /usr/local/jmx/jmx_prometheus_httpserver.yml

[Install]
WantedBy=multi-user.target
sudo cp jmx-expoter.service /etc/systemd/system
sudo systemctl daemon-reload

sudo systemctl start jmx-exporter

#동작 확인
sudo systemctl status jmx-exporter

curl <http://localhost:7071/metrics>
  • JMX 익스포터는 카프카 클러스터 내 모든 브로커에 설치해야 함.
  • 브로커 서버의 하드웨어 리소스 모니터링을 위해 노드 익스포터(Node Exporter)도 설치.
    • CPU, 메모리, 디스크, 네트워크 등의 리소스 사용량을 수집.
wget <https://github.com/prometheus/node_exporter/releases/download/node_exporter-1.6.0.linux-386.tar.gz> /usr/local

node_exporter-1.6.0.linux-386.tar.gz

sudo ln -s /usr/local/node_exporter-1.6.0.linux-386 /usr/local/node-exporter
sudo cp node-exporter.service /etc/systemd/system
sudo systemctl daemon-reload

sudo systemctl start node-exporter
sudo systemctl status node-exporter
# prometheus config
global: # 1
  scrape_interval:     5s
  evaluation_interval: 5s

scrape_configs:
  - job_name: 'peter-jmx-kafka' # 2
    static_configs:
      - targets:
        - peter-kafka01.foo.bar:7071
        - peter-kafka02.foo.bar:7071
        - peter-kafka03.foo.bar:7071

  - job_name: 'peter-kafka-nodes' # 3
    static_configs:
      - targets:
          - peter-kafka01.foo.bar:9100
          - peter-kafka02.foo.bar:9100
          - peter-kafka03.foo.bar:9100

  - job_name: 'peter-kafka-exporter'
    static_configs:
      - targets:
          - peter-kafka01.foo.bar:9308
          - peter-kafka02.foo.bar:9308
          - peter-kafka03.foo.bar:9308
  • 1 : 프로메테우스의 전반적인 설정
  • 2: 프로메테우스에서 메트릭을 수집할 대상을 설정하는 부분으로 JMX 익스포터에 대한 항목임.
  • 3: 프로메테우스에서 메트릭을 수집할 대상을 설정하는 부분으로 노드 익스포터에 대한 설정임.
  • 그라파나 대시보드 생성
    • http://pf-ansible01.sample.test:3000 으로 접속
    • 로그인 후 Add your first data source 선택 → Add data source 선택 → Prometheus 선택
    • http://pf-ansible01.sample.test:9090 입력
    • Save & Test 버튼 클릭
    • 좌측 상단 + 클릭 → Import 버튼 클릭 → Import via grafana.com 메뉴에서 1860 입력 후 Load 버튼 클릭.
    • Prometheus 드롭다운 메뉴에서 Prometheus 선택 후 Import 버튼 클릭.
    • JSON 파일 대시보드 임포트 → Import via panel json 창 붙여넣기 kafka_metrics.json cat kafka_metrics.json # 붙여넣기

3) 카프카 익스포터

  • 컨슈머의 LAG을 모니터링 하는 방법 제공
  • 설치 방법
    • 앤서블 배포 서버 접속
    cd ansible_playbook ansible-playbook -i hosts kafka-exporter.yml
    • prometheus.yml 설정 파일에 추가된 코드부
    - job_name: 'peter-kafka-exporter' static_configs: - targets: - peter-kafka01.foo.bar:9308 - peter-kafka02.foo.bar:9308 - peter-kafka03.foo.bar:9308 # 재시작 sudo docker restart prometheus

  • 알림 메시지

Alertmanager | Prometheus

이상으로 카프카 운영과 모니터링에 대한 설명을 마치겠습니다.

카프카 도입 사례에 대한 설명이 필요하신 분은 여기 링크를 참고바랍니다.

좀더 자세한 설명을 원하시는 분은 실전 카프카 개발부터 운영까지 도서를 참고바립니다.


참고 : 실전 카프카 개발부터 운영까지

아래는 카프카 관련 국내 도서입니다.

실전 카프카 개발부터 운영까지:데이터플랫폼의 중추 아파치 카프카의 내부동작과 개발 운영 보안의 모든것, 책만 아파치 카프카의 모든 것 세트 : 카프카 데이터 플랫폼의 최강자+실전 카프카 개발부터 운영까지, 책만 (서점추천) 헤드 퍼스트 디자인 패턴 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 24단계 실습으로 정복하는 쿠버네티스 + 실전 카프카 개발부터 운영까지 (전2권), 위키북스 (서점추천) 데이터 파이프라인 핵심 가이드 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 몽고DB 완벽 가이드 + 실전 카프카 개발부터 운영까지 (전2권) (서점추천) 클린 코드의 기술 + 실전 카프카 개발부터 운영까지 (전2권), 영진닷컴 (서점추천) 카프카 핵심 가이드 + 디지털 플랫폼 전략 수립을 위한 쿠버네티스 실전 활용서 (전2권), 제이펍 아파치 카프카 애플리케이션 프로그래밍 with 자바:카프카의 개념부터 스트림즈 커넥트 스프링 카프카까지, 비제이퍼블릭 카프카 핵심 가이드 개정증보판, 제이펍 실전 아파치 카프카:애플리케이션 개발부터 파이프라인 사물인터넷 데이터 허브 구축까지, 한빛미디어 카프카 데이터 플랫폼의 최강자:실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지, 책만 카프카 스트림즈와 ksqlDB 정복:실시간 데이터 처리, 에이콘출판 카프카 핵심가이드:실시간 데이터와 스트림 프로세싱, 제이펍

“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”

Back to top