반응형
Q. 카프카에서 발생할 수 있는 대표적인 에러 유형은?
Producer
| TimeoutException | 브로커 응답 지연 (네트워크, 리더 불안정) |
| RecordTooLargeException | 메시지 크기가 max.request.size 초과 |
| NotEnoughReplicasException | ISR 부족 → acks=all 충족 불가 |
| KafkaStorageException | 브로커 디스크 장애 (ISR 탈락 등 발생 가능) |
Consumer
| RebalanceInProgressException | Rebalance 중 poll 호출 |
| WakeupException | 안전한 종료 처리 도중 발생 |
| OffsetOutOfRangeException | 커밋된 offset이 사라진 경우 (retention.ms 초과) |
| CommitFailedException | group 재할당 중 커밋 시도 등 비정상 상황 |
클러스터/운영
| 브로커 장애 (Crash) | 리더 재선출, ISR 이동, 컨트롤러 재할당 발생 |
| ZK/KRaft delay | 메타데이터 지연 → Metadata fetch 문제 |
| 네트워크 분리 | Leader → Follower 복제 실패, 클라이언트 지연/실패 |
Q. 위 에러들을 테스트할 수 있는 라이브러리/도구
① Testcontainers + Embedded Kafka
- Kafka를 Docker 컨테이너로 테스트용 클러스터로 쉽게 구동
- Spring Kafka, Kafka Java Client와 JVM 내에서 통합 테스트 가능
- 일부 장애 상황을 유도할 수 있음 (브로커 중지, 네트워크 끊김 등)
예:
- 브로커 1개 중단 (kafkaContainer.stop())
- 특정 토픽에 메시지 크기 초과 메시지 전송
- Rebalance 유도 → onPartitionsRevoked() 확인
② Toxiproxy
- Kafka 브로커 ↔ 클라이언트 사이의 네트워크에 의도적으로 지연, 끊김, 제한을 주는 프록시
- TimeoutException, NetworkException, leader unavailable 등을 유도 가능
③ Spring Kafka Test + @EmbeddedKafka
- JVM 내 임베디드 Kafka 클러스터 구동
- 특정 상황 (e.g., offset 유실, 재시작) 등을 코드 내에서 테스트 가능
- KafkaTestUtils, EmbeddedKafkaBroker 사용
④ Chaos Engineering 툴 (실전 환경)
| Gremlin, Chaos Mesh, LitmusChaos | 실환경에서 Kafka 브로커/네트워크에 장애 유도 |
| kcat, kafka-producer-perf-test.sh | 메시지 전송 상태, 실패율 테스트 |
| JMeter + Kafka plugin | 부하 기반 테스트 시나리오 작성 가능 |
Q. 테스트 케이스는?
| 브로커 다운 중 producer 전송 → 예외 핸들링 | TimeoutException, NotLeaderForPartitionException |
| offset 커밋 실패 + 재시도 | CommitFailedException, 재poll 동작 |
| 리밸런싱 도중 메시지 재처리 여부 | onPartitionsRevoked(), ack.acknowledge() 누락 시 |
| 최대 메시지 크기 초과 | RecordTooLargeException, compression.type 등과 연계 |
| DLQ 정상 전송 여부 | ErrorHandler 설정 + 메시지 확인 |
반응형
'개발' 카테고리의 다른 글
| 단위 테스트에서 Mockito 잘 활용하기 (0) | 2023.09.22 |
|---|---|
| Spring Boot 3.x 기반 actuator 설정 및 custom metrics 추가 (0) | 2023.07.11 |
| Feign Client 커스텀 하기 (0) | 2023.07.05 |
| Kafka를 이용해 '실시간' 데이터 처리가 가능한가? (0) | 2022.12.11 |
| 2. Apis - 요약 (0) | 2022.12.04 |