본 포스팅은 인프런 데브원영님의 [아파치 카프카 애플리케이션 프로그래밍]의 강의를 수강 후 정리하는 글입니다.
1. 멀티스레드 컨슈머
n개의 스레드를 가진 1개의 프로세스를 운영하거나 1개의 스레드를 가진 프로세스 n개를 운영할 수 있음
배포 자동화가 잘 되어있다면 1개의 스레드를 가진 n개의 프로세스로 운영하는 것이 좋음
2. 컨슈머 랙
2-1. 컨슈머 랙 소개
컨슈머 랙: 파티션의 최신 오프셋과 컨슈머 오프셋 간의 차이
컨슈머가 동작하는지 여부를 확인할 수 있기 때문에 필수적으로 모니터링해야 하는 지표
2-2. 컨슈머 랙 모니터링
컨슈머 랙을 모니터링함으로써 컨슈머의 장애를 확인할 수 있고 파티션 개수를 정하는 데에 참고 가능
파티션 개수와 컨슈머 개수를 늘려서 병렬처리량을 늘리면 지연을 줄일 수 있음
2-3. 컨슈머 랙을 확인하는 방법 3가지
- 카프카 명령어 사용
bin/kafka-consumer-groups.sh --bootstrap-server 172.20.218.223:9092 \
--group my-group --describe
카프카 명령어를 통해 컨슈머랙을 확인하는 방법은 일회성에 그친다.
지표를 지속적으로 기록하고 모니터링하기에는 부족하여 테스트용 카프카에서 주로 사용
- metrics() 메서드 사용
records-lag-max, records-lag, records-lag-avg 3가지 지표 확인 가능
metrics() 메서드 사용의 단점
1. 컨슈머가 정상 동작할 경우에만 확인 가능
2. 모든 컨슈머 애플리케이션에 컨슈머 랙 모니터링 코드를 중복해서 작성
3. 컨슈머 랙을 모니터링하는 코드를 추가할 수 없는 카프카 서드 파티 애플리케이션의 컨슈머 랙 모니터링이 불가능
ex) logstash, fluentd
외부 모니터링 툴 사용
컨슈머 랙을 모니터링하는 가장 최선의 방법
컨슈머 랙 모니터링만을 위한 툴로 오픈소스로 공개되어 있는 버로우(Burrow)가 있음
3. 버로우
깃헙 링크: https://github.com/linkedin/Burrow
3-1. 카프카 버로우
링크드인에서 개발하여 오픈소스로 공개한 컨슈머 랙 체크 툴
REST API 통해 컨슈머 그룹 별로 컨슈머 랙을 확인할 수 있음
모니터링 툴들은 클러스터와 연동되어 데이터를 활용하는 프로듀서나 컨슈머의 동작에 영향을 미치지 않음
3-2. REST API
Request | Method | URL Format |
Healthcheck | GET | /burrow/admin |
List Clusters | GET | /v3/kafka |
Kafka Cluster Detail | GET | /v3/kafka/(cluster) |
List Consumers | GET | /v3/kafka/(cluster)/consumer |
List Cluster Topics | GET | /v3/kafka/(cluster)/topic |
Get Consumer Detail | GET | /v3/kafka/(cluster)/consumer/(group) |
Consumer Group Status | GET | /v3/kafka/(cluster)/consumer/(group)/status /v3/kafka/(cluster)/consumer/(group)/lag |
Remove Consumer Group | DELETE | /v3/kafka/(cluster)/consumer/(group) |
3-3. 컨슈머 랙 이슈 판별
컨슈머와 파티션의 상태를 단순히 컨슈머 랙의 임계치로 나타내지 않았음
버로우에서는 임계치가 아닌 슬라이딩 윈도우 계산을 통해 문제가 생긴 파티션과 컨슈머의 상태를 표현
Evaluation: 컨슈머 랙의 상태를 표현
- 정상적인 경우
- 컨슈머 처리량 이슈
이유: 컨슈머의 데이터 처리량이 프로듀서가 보내는 데이터양에 비해 적음
파티션: OK
컨슈머: WARNING
- 컨슈머 이슈
컨슈머 오프셋이 일정한 것으로 보아 커밋이 일어나지않는 걸로 컨슈머에 이슈가 있음을 확인
파티션: STALLED
컨슈머: ERROR
3-4. 컨슈머 랙 모니터링 아키텍처
- 버로우
- 텔레그래프
- 엘라스틱서치
- 그라파나
'Kafka' 카테고리의 다른 글
[Apache Kafka] 8. 카프카 스트림즈(1) - KStream,KTable,GlobalKTable (0) | 2024.10.29 |
---|---|
[Apache Kafka] 7. 멱등성 프로듀서, 트랜잭션 프로듀서와 컨슈머 (0) | 2024.10.28 |
[Apache Kafka] 6. 카프카 컨슈머 애플리케이션 개발(1) (3) | 2024.10.25 |
[Apache Kafka] 5. 카프카 프로듀서 애플리케이션 개발 (0) | 2024.10.23 |
[Apache Kafka] 4. 아파치 카프카 CLI 활용(4) - CLI 추가 참고사항 (0) | 2024.10.11 |