Kafka 주니어 기술면접
새 면접Q. Kafka의 Topic, Partition, Offset의 개념과 이들 간의 관계를 설명해주세요.
데이터가 어떻게 논리적으로 분류되고, 물리적으로 분산되며, 순서가 관리되는지 생각해보세요.
Topic은 메시지를 논리적으로 분류하는 카테고리입니다. Partition은 Topic을 물리적으로 분할한 단위로, 데이터를 여러 브로커에 분산 저장하여 처리량을 높입니다. Offset은 각 Partition 내에서 메시지의 고유한 순번으로, Consumer가 어디까지 읽었는지 추적하는 데 사용됩니다. 하나의 Topic은 여러 Partition으로 구성되며, 각 Partition은 독립적으로 순서가 보장되는 Offset을 가집니다. 같은 Partition 내에서는 메시지 순서가 보장되지만, 서로 다른 Partition 간에는 순서가 보장되지 않습니다.
- • Topic은 메시지의 논리적 분류
- • Partition은 물리적 분산 단위
- • Offset은 Partition 내 메시지의 순번
- • Partition 내에서만 순서 보장
대용량 로그 수집 시스템에서 Topic으로 로그 종류를 구분하고 Partition으로 처리를 분산시켜 성능을 확보합니다.
그렇다면 Partition 개수를 결정할 때 고려해야 할 요소는 무엇인가요?
Q. Kafka Consumer Group의 개념과 동작 방식을 설명하고, 같은 Consumer Group 내에서 Partition이 Consumer에게 어떻게 할당되는지 설명해주세요.
여러 Consumer가 협력하여 메시지를 처리할 때 중복 처리를 어떻게 방지하는지 생각해보세요.
Consumer Group은 하나의 Topic을 협력하여 소비하는 Consumer들의 논리적 그룹입니다. 같은 Consumer Group 내에서 각 Partition은 오직 하나의 Consumer에게만 할당되어 메시지 중복 처리를 방지합니다. Partition 할당은 Kafka의 Rebalancing 과정을 통해 자동으로 이루어지며, Consumer가 추가되거나 제거될 때 재조정됩니다. 만약 Consumer 수가 Partition 수보다 많으면 일부 Consumer는 유휴 상태가 됩니다. 서로 다른 Consumer Group은 같은 Topic을 독립적으로 소비할 수 있어, 하나의 데이터를 여러 애플리케이션에서 각각 처리할 수 있습니다.
- • Consumer Group은 협력 소비 단위
- • 하나의 Partition은 Group 내 하나의 Consumer에게만 할당
- • Rebalancing으로 자동 할당 조정
- • 다른 Group은 독립적으로 소비 가능
주문 처리 시스템에서 여러 서버 인스턴스가 Consumer Group을 구성하여 주문 메시지를 분산 처리합니다.
Rebalancing이 발생하는 상황과 이로 인해 발생할 수 있는 문제점은 무엇인가요?
Q. Kafka Producer의 acks 설정(0, 1, all)에 따른 메시지 전송 보장 수준과 성능 차이를 설명해주세요.
Producer가 메시지 전송 성공을 확인하는 시점과 데이터 손실 가능성의 트레이드오프를 고려하세요.
acks는 Producer가 메시지 전송 성공으로 간주하는 기준을 설정합니다. acks=0은 Producer가 응답을 기다리지 않고 전송만 하므로 가장 빠르지만 데이터 손실 위험이 높습니다. acks=1은 Leader Broker가 메시지를 받았다는 확인만 받으므로 적절한 성능과 안정성을 제공하지만, Leader 장애 시 데이터가 손실될 수 있습니다. acks=all(또는 -1)은 Leader와 모든 In-Sync Replica가 메시지를 받았다는 확인을 받으므로 가장 안전하지만 성능이 가장 느립니다. 실무에서는 데이터의 중요도에 따라 적절한 acks 값을 선택해야 하며, 금융 거래처럼 중요한 데이터는 acks=all을 사용합니다.
- • acks는 전송 성공 확인 기준
- • acks=0은 빠르지만 불안정
- • acks=1은 균형적
- • acks=all은 안전하지만 느림
- • 데이터 중요도에 따라 선택
결제 시스템에서는 acks=all로 설정하여 결제 데이터 손실을 방지하고, 로그 수집에서는 acks=1로 성능을 확보합니다.
그렇다면 min.insync.replicas 설정은 acks=all과 어떤 관계가 있나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!