-
웹 크롤러에 Kafka 도입(2)Back-End/Kafka 2022. 4. 1. 15:37728x90
자동 토픽 생성
- 크롤러에 필요한 토픽은 총 2개이다. "queue-html", "reverse-queue-html"
- 2개의 토픽을 CLI를 통해 생성할 수 있으나, html-worker를 실행하면서 동시에 만들어질 수 있도록 설정을 해 본다.
@Bean public KafkaAdmin.NewTopics crawlerTopics(){ return new KafkaAdmin.NewTopics( TopicBuilder.name(KafkaTopicConfig.QUEUE_HTML).build(), TopicBuilder.name(KafkaTopicConfig.REVERSE_QUEUE_HTML).build() ); }
간단하게 KafkaAdmin.newTopics를 빈으로 등록 해 주면, 어플리케이션이 실행되면서 토픽이 등록이 된다.
배치 기능
아래 그림은 Producer의 구조이다.
성능 측정
Kafka template의 metric 메서드를 먼저 뽑아보고, 메세지 컨테이너를 registry에 등록되 있는
마지막으로 spring actuator, prometheus, grafana를 로드하고 설정한다.
- 실습 전, 주키퍼와 카프카를 띄워놓고 application runner를 만들어놓고 디펜던시에 spring kafka 넣어둔다.
- ApplicationRunner에서 kafkaTemplate.mertrics로 프로듀서의 metric을 가져올 수 있다.
- consumer 패키지에 카프카리스너를 만든다. 이 때 이 리스너는 카프카리스너 엔드포인트 레지스트리에 등록된다. 그 레지스트리를 가져와본다.
- actuator를 사용하기 위해, 디펜던시 추가 해 준다.
- actuator로 제공할 엔드포인트가 어떤 것을 표현 할 것인지를 설정한다.
- 추가로, 주키퍼가 8080에 띄워져있으므로 8180 포트에 띄워준다.
- 어플리케이션 실행하면 하단의 actuator 탭을 통해 metric 값을 볼 수 있다.
implementation 'io.micrometer:micrometer-registry-prometheus:1.7.6'
-
프로메테우스 사용
- 디펜던시에 프로메테우스를 추가하여, yml의 management 프로퍼티에 metrics와 prometheus 엔드포인트를 사용할 수 있도록 한다.
- 적용 시 metrics 정보와 프로메테우스를 정보만 사용할 수 있게 된다.
- metrics정보를 프로메테우스를가 가져갈 수 있도록 하는 것이다. 그래서 이제 프로메테우스를 설치해서, 해당 정보를 가져갈 수 있도록 한다.
- 설치 후 프로메테우스 실행 시,cannot be opened because the developer cannot be verified' error가 뜰 수 있다. 이 경우는 아래 링크 참조
- 프로메테우스의 yml 파일에 들어가서, scrape_configs를 설정 해 준다.
- job_name은 임의로 정하고, 우리는 actuator/prometheus 정보를 가져올 것이므로 해당 경로를 metrics_path에 설정 해 준다.
- static configs로 localhost:8180(현재 실행중인 어플리케이션의 host주소 + 포트번호) 를 넣어준다.
- scrape_intervals는 매 5초마다 해당 서버로부터 데이터를 가져오겠다는 얘기이다.
- 프로메테우스를 통해 데이터를 볼 수 있지만, 시각적으로 좀 더 편하게 보기 위해서 그라파나를 사용할 것이다. 그라파나를 설치한다.
- grafana를 3000포트로 띄우고, datasource에 들어가서 localhost:9090(프로메테우스 주소)를 설정한다.
- 그라파나에서 increase메서드로 10초 주기로 데이터를 뽑아오면 그래프로 metric 정보를 볼 수 있다.
'Back-End > Kafka' 카테고리의 다른 글
[Spring-kafka] MSA 환경에서 토픽 이름에 맞게 KafkaMessage 역직렬화하여 수신하기 (0) 2024.10.13 웹 크롤러에 Kafka 도입 (0) 2022.03.30 kafka란? (0) 2021.10.21