대용량 실시간 데이터 처리 시 Kafka Streams 애플리케이션의 상태 저장(stateful processing) 전략과 장애 복구(fault tolerance) 방안에 대해 설명하고, RocksDB와 같은 상태 저장소의 성능 최적화 기법을 포함하여 설계 방안을 제시하시오.
힌트 · Kafka Streams는 changelog 토픽을 통해 상태를 복구하며, RocksDB는 로컬 디스크 I/O 최적화와 메모리 관리가 중요합니다.
모범답안
Kafka Streams에서 상태 저장 처리는 데이터를 집계하거나 조인하는 등 상태를 유지해야 할 때 필수적입니다. 상태 저장소로는 주로 RocksDB가 사용되며, 이는 로컬 디스크에 상태를 저장합니다.
장애 복구는 Kafka Streams가 내부적으로 관리하는 changelog 토픽을 통해 이루어집니다. 애플리케이션이 중단되면, 마지막으로 커밋된 오프셋부터 changelog 토픽을 읽어 상태를 재구축합니다. 이를 위해 주기적인 체크포인팅(checkpointing)이 중요하며, 이는 상태 저장소의 스냅샷을 생성하고 해당 오프셋을 Kafka에 기록합니다.
RocksDB 성능 최적화를 위해선 로컬 디스크 I/O를 줄이는 것이 핵심입니다. 예를 들어, 쓰기 증폭(write amplification)을 줄이기 위해 memtable 크기를 조절하거나, read performance 향상을 위해 block cache를 적절히 설정할 수 있습니다. 또한, compaction 전략을 튜닝하여 디스크 공간 사용량과 읽기 성능 간의 균형을 맞추는 것도 중요합니다.
Exactly-once semantics를 보장하기 위해 Kafka Streams는 트랜잭션 API를 활용하며, 이는 상태 저장소 업데이트와 Kafka 커밋을 원자적으로 처리하여 데이터 중복이나 손실 없이 정확히 한 번만 처리되도록 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 메시지 큐 (Kafka) 면접 질문
- Kafka의 ISR(In-Sync Replicas) 개념은 무엇이며, 이것이 데이터 손실 방지 및 고가용성 유지에 어떻게 기여하는지 설명해 주세요.
- Kafka 프로듀서가 메시지를 브로커로 전송할 때 발생할 수 있는 At-Most-Once, At-Least-Once, Exactly-Once 딜리버리 시맨틱스 각각의 특징과 구현 방법을 설명해 주세요.
- Kafka의 로그 컴팩션(Log Compaction)은 무엇이며, 어떤 경우에 유용하게 사용될 수 있는지 구체적인 예시와 함께 설명해 주세요.
- Kafka에서 End-to-End Exactly-Once Semantics를 보장하기 위한 프로듀서, 브로커, 컨슈머 측면에서의 접근 방식과 각 구성 요소의 역할을 설명하고, 이 과정에서 발생할 수 있는 잠재적 이슈와 해결 방안을 논하시오.
- Kafka Connect 클러스터를 프로덕션 환경에서 고가용성(High Availability) 및 확장성(Scalability)을 보장하도록 설계하고 운영하기 위한 방안을 설명하시오. 특히 Source/Sink 커넥터의 장애 발생 시 데이터 유실 없이 복구하는 전략에 대해 구체적으로 제시하시오.
- 수백 개의 토픽과 수천 개의 파티션을 가진 대규모 Kafka 클러스터에서 안정적인 성능을 유지하기 위한 브로커, 프로듀서, 컨슈머 각 계층에서의 주요 튜닝 파라미터와 그 효과에 대해 설명하시오. 특히 네트워크, 디스크 I/O 관점에서 최적화 방안을 포함하시오.