SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Kafka 관리와 모니터링
2021.10.15 서장원
Apache Kafka
Ⅰ
Ⅱ
Ⅲ
Apache Kafka 필수 명령어
Apache Kafka 주요 옵션
Apache Kafka 모니터링
Ⅰ.Apahe Kafka 필수 명령어
토픽생성
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf 
--replication-factor 1 –partitions 1 –topic mytopic --create
Created topic “ mytopic”.
토픽 리스트 확인
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --list
……consuumer_offsets
Mytopic
토픽 상세보기
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf 
--topic mytopic --describe
Topic : mytopic PartitionCount: 1 ReplicationFactor : 1 configs :
Topic : mytopic Partition : 0 Leader : 1 Replica : 1 lsr: 1
토픽 삭제
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf 
--delete –topic mytopic
Topic mytopic is marked for deletion
Note : This will have no impact if delete, topic, enable is not set to true
Ⅰ.Apahe Kafka 필수 명령어
토픽의 파티션 수 변경
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf 
--after –topic mytopic –partitions 2
WARNNING: if partitions are increased for a topic that has a key, the partition
Logic or ordering of the messages will be affected
Adding partitions succeded!
토픽의 리플리케이션 팩터 변경
=> Json 형식의 파일 생성 필요
{“version” : 1,
“partitions”:[
{“topic”:”mytopic”,”partition”:0,”replicas”:[1,2]},
{“topic”:”mytopic”,”partition”:1,”replicas”:[2,3]},
{“topic”:”mytopic”,”partition”:2,”replicas”:[1,3]}
]}
컨슈머 그룹 리스트 확인
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --list
myconsumer
[root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf 
--ressignment-json-file ./rf.json --execute
Ⅱ.Apahe Kafka 주요 옵션
Producer
▶batch.size : 메시지 데이터를 미리 설정된 사이즈가 될 때까지 모아 한번에 배치로 전송
- 빈번한 I/O와 네트워크 왕복의 오버헤드를 줄여 서버와 클라이언트 모두 성능 향상
- 장애 발생 시 메시지가 유실될 가능성이 있어 고가용성이 필요한 시스템의 경우 해당 설정값을 주지 않기도 함
▶linger.ms : batch.size에 도달하지 못한 상황에서 linger.ms 제한시간에 도달하면 메시지를 전송
- 프로듀서의 전송속도와 전송량을 감안해 batch.size가 충분히 찰 수 있도록 시간 조정 필요
▶ compression.type : 프로듀서가 데이터를 압축해서 보낼 때 사용할 압축 포맷
- 보통 압축된 포맷을 사용하는 것이 성능에 유리하며 gzip, snappy, lz4 등의 포맷 지원
▶ retries : 오류로 인해 전송이 실패한 경우 데이터를 다시 보내는 횟수
- 재전송으로 인해 레코드의 순서가 바뀔 수 있음
▶ buffer.memory : Kafka 서버로 전송을 기다리는 메시지를 위해 프로듀서가 사용할 버퍼 메모리 크기
- 브로커로 전송하는 속도보다 버퍼에 쌓이는 속도가 더 빨리 buffer.memory만큼 쌓이면 메시지 전송은 블락되고
max.block.ms 시간이 넘어가면 exception이 발생
▶ acks : 프로듀서가 토픽의 리더에게 메시지를 보낸 후 요청을 완료하기 전까지 받는 ack의 수
- 옵션의 수가 작으면 성능이 좋지만 메시지 손실 가능성이 있고 수가 크면 그 반대임.
Ⅱ.Apahe Kafka 주요 옵션
Broker
▶ auto. Create. Topic. Enable
- 존재하지 않는 토픽으로 메시지를 전송 시 자동으로 토픽을 생성할지 여부
▶ num.replica.fetchers : 리더에서 메시지를 복제할 때 사용할 Thread 수, 기본값은 1
▶ default.replication.factor : 토픽을 자동으로 생성할 때 설정할 replica의 개수, 기본값은 1
▶ unclean. Leader. Election. Enable : ISR이 아닌 브로커를 리더로 선출할 수 있는지 여부
▶ log. Retention.{ms,minutes,hours} : 메시지 데이터를 디스크에 보관할 시간
- 기본값은 7일(168시간)
▶ log.flush. Interval message : 메시지를 디스크로 내보내기 전 메모리에 보유할 메시지 개수
▶ min. insync. Replicas : 최소 replication factor 수
- 리더 파티션이 프로듀서에게 ack를 보내기 전 이 설정만큼의 replication이 유지되는지 확인
Ⅱ.Apahe Kafka 주요 옵션
Consumer
▶fetch. Min(max). Bytes
- 한번에 가져올 수 있는 최소/최대 사이즈. 지정 사이즈보다 작으면 누적될 때까지 대기
▶enable.auto.commit: 백그라운드로 주기적인 오프셋 커밋을 수행할 지 여부(auto.commit.interval.ms)
▶ auto.offset.reset: 초기 오프셋이 없거나 현재 오프셋이 없는 경우 어떻게 리셋할 것인지 설정
- earliest : 가장 초기의 오프셋 값으로 설정한다
- lastest : 가장 마지막의 오프셋 값으로 설정한다
- none : 이전 오프셋 값을 찾지 못하면 에러를 발생한다
▶ session.timeout.ms: 세션 타임아웃 시간으로 컨슈머가 살아있는 것으로 판단하는 시간
- 컨슈머가 해당 시간 안에 그룹 코디네이터에게 하트비트를 보내지 않으면 컨슈머 그룹은 리밸런싱을 시도
- 낮게 설정하면 실패를 빨리 감지하지만 GC나 루프처리로 인해 원하지 않는 리밸런싱이 일어날 수 있으며, 높게
설정하면 리밸런싱의 가능성은 줄어 들지만 실패를 빨리 감지할 수 없음
▶ heartbeat.interval.ms: 그룹 코디네이터에게 얼마나 자주 하트비트를 보낼 것인지 조정
- session.timeout.ms와 밀접한 관계가 있으며 session.timeout.ms보다 더 낮아야함.
- 일반적으로 session.timeout.ms의 3분의 1정도로 설정한다. 기본값은 3초
▶ max.poli.interval.ms: 컨슈머가 메시지를 가져간 후 다음 작업까지 얼마나 기다리는지에 대한 설정
- 컨슈머가 하트비트만 보내고 메시지를 가져가지 않는 경우에 대해 무한정 해당 파티션을 점유할 수 없도록
추가적으로 메시지를 가져가지 않으면 장애라고 판단
Ⅱ.Apahe Kafka 주요 옵션
acks
▶acks=0 : 프로듀서는 서버로부터 어떠한 ack도 기다리지 않음
▶acks=1 : 리더는 데이터를 기록하지만 팔로워의 처리결과는 확인하지 않음
▶acks=all or -1 : 리더는 ISR의 모든 팔로워로부터 ack를 기다림
Ⅱ.Apahe Kafka 주요 옵션
Unclean.leader.election.enable
▶고가용성을 위한 replication
Ⅱ.Apahe Kafka 주요 옵션
Unclean.leader.election.enable
▶ISR이 아닌 OSR(out-of-Sync Replica) 상태의 Broker가 Leader가 될 수 있음.
Ⅲ.Apache Kafka 모니터링
Kafka 모니터링을 위한 Metrics 이해
▶Metrics(metric) : 성능이나 상태를 모니터링하기 위한 측정 지표
- Kafka application의 메트릭은 실제로 너무 많아 무엇을 잘 지켜봐야 하는지 혼란스러움
- Kafka application에서 생성되고 제공하는 내부 메트릭 (프로듀서, 브로커, 컨슈머 등)
- OS, 디스크 사용률, 네트워크 부하, 웹서버의 상태 등의 외부 메트릭
▶Metric 선정의 중요성
- 너무 적으면 문제가 발생해도 알지 못하는 상황이 생길 수 있음
- 너무 많으면 알람이 많아 얼마나 심각한 문제인지 알기 어려움
- 모든 메트릭의 임계값을 적합하게 정의하기도 어렵고 최신으로 유지하기도 어렵다.
고수준의 범위를 갖는 소수의 메트릭을 선택해야 한다.
Ⅲ.Apache Kafka 모니터링
JMX 인터페이스를 이용한 모니터링
▶JMX(Java Management eXtensions) : 자바로 만든 Application의 모니터링 도구를
제공하는 자바 API
- JVM 기반에서 동작하는 모든 프로세스는 JMX metrics 정보를 제공
- Mbean(Managed Bean) 이라는 객체로 표현됨
▶JMX를 이용하기 위해서 Kafka 실행파일에 JMX 관련 설정을 추가
- Kafka-server-start.sh 파일을 열고 export JMX_PORT=9999 구문을 추가 후 재시작
▶JMX metrics 정보를 Prometheus, Elasticsearch, InfluxDB 등을 이용해 수집하고,
ELK Stack, Grafana 같은 시각화 도구를 이용해 모니터링 수행
▶JMX를 이용한 모니터링 수행 시 현실적인 어려움과 한계가 존재
- Kafka Client가 JVM 기반 언어로 한정됨
- 프로듀서와 컨슈머 추가/삭제 시 모니터링을 위한 추가 작업 필요
Ⅲ.Apache Kafka 모니터링
Kafka의 Metric 리포팅과 관련된 Class 구조
Ⅲ.Apache Kafka 모니터링
LAG를 이용한 컨슈머 모니터링
▶LAG : 현재 토픽에 저장된 메시지와 컨슈머가 가져간 메시지의 차이
- 프로듀서가 Kafka 토픽으로 10개의 메시지를 모냈는데 컨슈머가 5개만 가져갔으면 LAG는 5가 됨.
▶컨슈머의 처리시간이 지연되면 토픽 내부의 파티션 LAG가 증가
- LAG 모니터링을 통해 어느 파티션의 LAG가 증가하고 있는지, 어느 컨슈머에 문제가 있는지 확인 가능
▶LAG가 중요한 지표이긴 하나 MAX LAG 숫자 그 자체로서 장애/비장애를 구별할 수 없음
Ⅲ.Apache Kafka 모니터링
버로우(Burrow)를 이용한 LAG 모니터링
▶버로우 : Kafka를 개발한 링크드인에서 만든 컨슈머 LAG 모니터링 툴
▶아래의 한계로 인해 외부 지연 모니터링 Application을 사용하기 위해 개발됨
- 컨슈머 fetch 관련 Mbean에서 보여주는 LAG metric 정보는 가장 뒤쳐진 파티션의 지연상태만 보여줌
- 하나의 파티션에 대한 컨슈머 지연만 보여주기 때문에 타 파티션의 상태 확인이 어려움
- 컨슈머 자체가 정상 작동되지 않고 멈춘 경우 LAG 감지가 불가능
▶버로우는 지연이 실제 문제발생을 의미하는지 결정하는 것에 있어 상대적으로 정확함
- 버로우 Evaluator 모듈이 내부의 Consumer LAG Evaluation Rules에 따라 컨슈머 그룹의 상태를 평가
▶Consumer LAG Evaluation Rules
- 0인 lag가 존재하면 상태는 ‘OK’
- 컨슈머 오프셋이 변경되지 않고, lag가 고정 혹은 증가하는 경우 컨슈머는 ‘ERROR’이고, 해당 파티션은
‘STALLED’
- 컨슈머 오프셋이 증가하지만 lag가 고정 혹은 증가하는 경우 컨슈머는 ‘WARNING’ 임
- 가장 최근 오프셋 시간과 현재시간(측정시간)의 차이가 가장 최근과 가장 오래된 오프셋 시간의 차이
보다 클 경우 컨슈머는 ‘ERROR’ 이고 파티션은 ‘STOPPED’
- lag가 -1인 경우 특수한 값이므로 브로커의 오프셋이 존재하지 않음을 의마하며 정상으로 간주함
Ⅲ.Apache Kafka 모니터링
버로우 Architecture
Next Study
Kafka 확장과 응용

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Apache Kafka Best Practices
Apache Kafka Best PracticesApache Kafka Best Practices
Apache Kafka Best Practices
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
APACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsAPACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka Streams
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
0-60: Tesla's Streaming Data Platform ( Jesse Yates, Tesla) Kafka Summit SF 2019
0-60: Tesla's Streaming Data Platform ( Jesse Yates, Tesla) Kafka Summit SF 20190-60: Tesla's Streaming Data Platform ( Jesse Yates, Tesla) Kafka Summit SF 2019
0-60: Tesla's Streaming Data Platform ( Jesse Yates, Tesla) Kafka Summit SF 2019
 
NiFi 시작하기
NiFi 시작하기NiFi 시작하기
NiFi 시작하기
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
 
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity PlanningFrom Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
Tame the small files problem and optimize data layout for streaming ingestion...
Tame the small files problem and optimize data layout for streaming ingestion...Tame the small files problem and optimize data layout for streaming ingestion...
Tame the small files problem and optimize data layout for streaming ingestion...
 
ksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database SystemksqlDB: A Stream-Relational Database System
ksqlDB: A Stream-Relational Database System
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
Flexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache FlinkFlexible and Real-Time Stream Processing with Apache Flink
Flexible and Real-Time Stream Processing with Apache Flink
 
Improving Kafka at-least-once performance at Uber
Improving Kafka at-least-once performance at UberImproving Kafka at-least-once performance at Uber
Improving Kafka at-least-once performance at Uber
 
Tuning Apache Kafka Connectors for Flink.pptx
Tuning Apache Kafka Connectors for Flink.pptxTuning Apache Kafka Connectors for Flink.pptx
Tuning Apache Kafka Connectors for Flink.pptx
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka Introduction
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache Kafka
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기Maria db 이중화구성_고민하기
Maria db 이중화구성_고민하기
 
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
Custom DevOps Monitoring System in MelOn (with InfluxDB + Telegraf + Grafana)
 

Ähnlich wie Apache kafka 관리와 모니터링

[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기
Chanyeol yoon
 

Ähnlich wie Apache kafka 관리와 모니터링 (20)

Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
 
[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기
 
Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
Warp
WarpWarp
Warp
 
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloops
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
Kafka introduce kr
Kafka introduce krKafka introduce kr
Kafka introduce kr
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
resource on openstack
 resource on openstack resource on openstack
resource on openstack
 
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
[오픈소스컨설팅]Scouter 설치 및 사용가이드(JBoss)
 

Apache kafka 관리와 모니터링

  • 2. Apache Kafka Ⅰ Ⅱ Ⅲ Apache Kafka 필수 명령어 Apache Kafka 주요 옵션 Apache Kafka 모니터링
  • 3. Ⅰ.Apahe Kafka 필수 명령어 토픽생성 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --replication-factor 1 –partitions 1 –topic mytopic --create Created topic “ mytopic”. 토픽 리스트 확인 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --list ……consuumer_offsets Mytopic 토픽 상세보기 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --topic mytopic --describe Topic : mytopic PartitionCount: 1 ReplicationFactor : 1 configs : Topic : mytopic Partition : 0 Leader : 1 Replica : 1 lsr: 1 토픽 삭제 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --delete –topic mytopic Topic mytopic is marked for deletion Note : This will have no impact if delete, topic, enable is not set to true
  • 4. Ⅰ.Apahe Kafka 필수 명령어 토픽의 파티션 수 변경 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --after –topic mytopic –partitions 2 WARNNING: if partitions are increased for a topic that has a key, the partition Logic or ordering of the messages will be affected Adding partitions succeded! 토픽의 리플리케이션 팩터 변경 => Json 형식의 파일 생성 필요 {“version” : 1, “partitions”:[ {“topic”:”mytopic”,”partition”:0,”replicas”:[1,2]}, {“topic”:”mytopic”,”partition”:1,”replicas”:[2,3]}, {“topic”:”mytopic”,”partition”:2,”replicas”:[1,3]} ]} 컨슈머 그룹 리스트 확인 [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --list myconsumer [root@mykaf01 ~]# ./kafka-topics.sh –zookeeper mykaf01:2181, mykaf02:2181/frankaf --ressignment-json-file ./rf.json --execute
  • 5. Ⅱ.Apahe Kafka 주요 옵션 Producer ▶batch.size : 메시지 데이터를 미리 설정된 사이즈가 될 때까지 모아 한번에 배치로 전송 - 빈번한 I/O와 네트워크 왕복의 오버헤드를 줄여 서버와 클라이언트 모두 성능 향상 - 장애 발생 시 메시지가 유실될 가능성이 있어 고가용성이 필요한 시스템의 경우 해당 설정값을 주지 않기도 함 ▶linger.ms : batch.size에 도달하지 못한 상황에서 linger.ms 제한시간에 도달하면 메시지를 전송 - 프로듀서의 전송속도와 전송량을 감안해 batch.size가 충분히 찰 수 있도록 시간 조정 필요 ▶ compression.type : 프로듀서가 데이터를 압축해서 보낼 때 사용할 압축 포맷 - 보통 압축된 포맷을 사용하는 것이 성능에 유리하며 gzip, snappy, lz4 등의 포맷 지원 ▶ retries : 오류로 인해 전송이 실패한 경우 데이터를 다시 보내는 횟수 - 재전송으로 인해 레코드의 순서가 바뀔 수 있음 ▶ buffer.memory : Kafka 서버로 전송을 기다리는 메시지를 위해 프로듀서가 사용할 버퍼 메모리 크기 - 브로커로 전송하는 속도보다 버퍼에 쌓이는 속도가 더 빨리 buffer.memory만큼 쌓이면 메시지 전송은 블락되고 max.block.ms 시간이 넘어가면 exception이 발생 ▶ acks : 프로듀서가 토픽의 리더에게 메시지를 보낸 후 요청을 완료하기 전까지 받는 ack의 수 - 옵션의 수가 작으면 성능이 좋지만 메시지 손실 가능성이 있고 수가 크면 그 반대임.
  • 6. Ⅱ.Apahe Kafka 주요 옵션 Broker ▶ auto. Create. Topic. Enable - 존재하지 않는 토픽으로 메시지를 전송 시 자동으로 토픽을 생성할지 여부 ▶ num.replica.fetchers : 리더에서 메시지를 복제할 때 사용할 Thread 수, 기본값은 1 ▶ default.replication.factor : 토픽을 자동으로 생성할 때 설정할 replica의 개수, 기본값은 1 ▶ unclean. Leader. Election. Enable : ISR이 아닌 브로커를 리더로 선출할 수 있는지 여부 ▶ log. Retention.{ms,minutes,hours} : 메시지 데이터를 디스크에 보관할 시간 - 기본값은 7일(168시간) ▶ log.flush. Interval message : 메시지를 디스크로 내보내기 전 메모리에 보유할 메시지 개수 ▶ min. insync. Replicas : 최소 replication factor 수 - 리더 파티션이 프로듀서에게 ack를 보내기 전 이 설정만큼의 replication이 유지되는지 확인
  • 7. Ⅱ.Apahe Kafka 주요 옵션 Consumer ▶fetch. Min(max). Bytes - 한번에 가져올 수 있는 최소/최대 사이즈. 지정 사이즈보다 작으면 누적될 때까지 대기 ▶enable.auto.commit: 백그라운드로 주기적인 오프셋 커밋을 수행할 지 여부(auto.commit.interval.ms) ▶ auto.offset.reset: 초기 오프셋이 없거나 현재 오프셋이 없는 경우 어떻게 리셋할 것인지 설정 - earliest : 가장 초기의 오프셋 값으로 설정한다 - lastest : 가장 마지막의 오프셋 값으로 설정한다 - none : 이전 오프셋 값을 찾지 못하면 에러를 발생한다 ▶ session.timeout.ms: 세션 타임아웃 시간으로 컨슈머가 살아있는 것으로 판단하는 시간 - 컨슈머가 해당 시간 안에 그룹 코디네이터에게 하트비트를 보내지 않으면 컨슈머 그룹은 리밸런싱을 시도 - 낮게 설정하면 실패를 빨리 감지하지만 GC나 루프처리로 인해 원하지 않는 리밸런싱이 일어날 수 있으며, 높게 설정하면 리밸런싱의 가능성은 줄어 들지만 실패를 빨리 감지할 수 없음 ▶ heartbeat.interval.ms: 그룹 코디네이터에게 얼마나 자주 하트비트를 보낼 것인지 조정 - session.timeout.ms와 밀접한 관계가 있으며 session.timeout.ms보다 더 낮아야함. - 일반적으로 session.timeout.ms의 3분의 1정도로 설정한다. 기본값은 3초 ▶ max.poli.interval.ms: 컨슈머가 메시지를 가져간 후 다음 작업까지 얼마나 기다리는지에 대한 설정 - 컨슈머가 하트비트만 보내고 메시지를 가져가지 않는 경우에 대해 무한정 해당 파티션을 점유할 수 없도록 추가적으로 메시지를 가져가지 않으면 장애라고 판단
  • 8. Ⅱ.Apahe Kafka 주요 옵션 acks ▶acks=0 : 프로듀서는 서버로부터 어떠한 ack도 기다리지 않음 ▶acks=1 : 리더는 데이터를 기록하지만 팔로워의 처리결과는 확인하지 않음 ▶acks=all or -1 : 리더는 ISR의 모든 팔로워로부터 ack를 기다림
  • 9. Ⅱ.Apahe Kafka 주요 옵션 Unclean.leader.election.enable ▶고가용성을 위한 replication
  • 10. Ⅱ.Apahe Kafka 주요 옵션 Unclean.leader.election.enable ▶ISR이 아닌 OSR(out-of-Sync Replica) 상태의 Broker가 Leader가 될 수 있음.
  • 11. Ⅲ.Apache Kafka 모니터링 Kafka 모니터링을 위한 Metrics 이해 ▶Metrics(metric) : 성능이나 상태를 모니터링하기 위한 측정 지표 - Kafka application의 메트릭은 실제로 너무 많아 무엇을 잘 지켜봐야 하는지 혼란스러움 - Kafka application에서 생성되고 제공하는 내부 메트릭 (프로듀서, 브로커, 컨슈머 등) - OS, 디스크 사용률, 네트워크 부하, 웹서버의 상태 등의 외부 메트릭 ▶Metric 선정의 중요성 - 너무 적으면 문제가 발생해도 알지 못하는 상황이 생길 수 있음 - 너무 많으면 알람이 많아 얼마나 심각한 문제인지 알기 어려움 - 모든 메트릭의 임계값을 적합하게 정의하기도 어렵고 최신으로 유지하기도 어렵다. 고수준의 범위를 갖는 소수의 메트릭을 선택해야 한다.
  • 12. Ⅲ.Apache Kafka 모니터링 JMX 인터페이스를 이용한 모니터링 ▶JMX(Java Management eXtensions) : 자바로 만든 Application의 모니터링 도구를 제공하는 자바 API - JVM 기반에서 동작하는 모든 프로세스는 JMX metrics 정보를 제공 - Mbean(Managed Bean) 이라는 객체로 표현됨 ▶JMX를 이용하기 위해서 Kafka 실행파일에 JMX 관련 설정을 추가 - Kafka-server-start.sh 파일을 열고 export JMX_PORT=9999 구문을 추가 후 재시작 ▶JMX metrics 정보를 Prometheus, Elasticsearch, InfluxDB 등을 이용해 수집하고, ELK Stack, Grafana 같은 시각화 도구를 이용해 모니터링 수행 ▶JMX를 이용한 모니터링 수행 시 현실적인 어려움과 한계가 존재 - Kafka Client가 JVM 기반 언어로 한정됨 - 프로듀서와 컨슈머 추가/삭제 시 모니터링을 위한 추가 작업 필요
  • 13. Ⅲ.Apache Kafka 모니터링 Kafka의 Metric 리포팅과 관련된 Class 구조
  • 14. Ⅲ.Apache Kafka 모니터링 LAG를 이용한 컨슈머 모니터링 ▶LAG : 현재 토픽에 저장된 메시지와 컨슈머가 가져간 메시지의 차이 - 프로듀서가 Kafka 토픽으로 10개의 메시지를 모냈는데 컨슈머가 5개만 가져갔으면 LAG는 5가 됨. ▶컨슈머의 처리시간이 지연되면 토픽 내부의 파티션 LAG가 증가 - LAG 모니터링을 통해 어느 파티션의 LAG가 증가하고 있는지, 어느 컨슈머에 문제가 있는지 확인 가능 ▶LAG가 중요한 지표이긴 하나 MAX LAG 숫자 그 자체로서 장애/비장애를 구별할 수 없음
  • 15. Ⅲ.Apache Kafka 모니터링 버로우(Burrow)를 이용한 LAG 모니터링 ▶버로우 : Kafka를 개발한 링크드인에서 만든 컨슈머 LAG 모니터링 툴 ▶아래의 한계로 인해 외부 지연 모니터링 Application을 사용하기 위해 개발됨 - 컨슈머 fetch 관련 Mbean에서 보여주는 LAG metric 정보는 가장 뒤쳐진 파티션의 지연상태만 보여줌 - 하나의 파티션에 대한 컨슈머 지연만 보여주기 때문에 타 파티션의 상태 확인이 어려움 - 컨슈머 자체가 정상 작동되지 않고 멈춘 경우 LAG 감지가 불가능 ▶버로우는 지연이 실제 문제발생을 의미하는지 결정하는 것에 있어 상대적으로 정확함 - 버로우 Evaluator 모듈이 내부의 Consumer LAG Evaluation Rules에 따라 컨슈머 그룹의 상태를 평가 ▶Consumer LAG Evaluation Rules - 0인 lag가 존재하면 상태는 ‘OK’ - 컨슈머 오프셋이 변경되지 않고, lag가 고정 혹은 증가하는 경우 컨슈머는 ‘ERROR’이고, 해당 파티션은 ‘STALLED’ - 컨슈머 오프셋이 증가하지만 lag가 고정 혹은 증가하는 경우 컨슈머는 ‘WARNING’ 임 - 가장 최근 오프셋 시간과 현재시간(측정시간)의 차이가 가장 최근과 가장 오래된 오프셋 시간의 차이 보다 클 경우 컨슈머는 ‘ERROR’ 이고 파티션은 ‘STOPPED’ - lag가 -1인 경우 특수한 값이므로 브로커의 오프셋이 존재하지 않음을 의마하며 정상으로 간주함