kafka에서 무결성(Durability) 보장을 위한 방안
Kafka는 데이터 무결성을 보장하기 위해 다양한 메커니즘을 사용합니다. 아래는 그 주요 방안들입니다.
-
복제본(replication)
데이터 복제: Kafka는 데이터 무결성을 위해 각 파티션을 여러 브로커에 복제합니다. 이를 통해 특정 브로커에 장애가 발생하더라도 다른 복제본(replica)이 존재하여 데이터 손실을 방지할 수 있습니다.
ISR (In-Sync Replica): 리더 복제본과 동기화된 복제본들을 ISR이라 부르며, Kafka는 ISR 내의 복제본들만을 사용해 데이터를 일관되게 유지합니다. -
ACK (Acknowledgment) 설정
Kafka는 프로듀서가 데이터를 전송할 때 데이터가 성공적으로 기록되었는지 확인하는 ACK 메커니즘을 제공합니다. acks=all로 설정하면, 모든 복제본에 데이터가 저장될 때까지 응답을 기다리므로 데이터 손실 가능성을 줄일 수 있습니다. -
리더와 팔로워 간 동기화
Kafka의 리더 복제본은 모든 기록된 메시지를 팔로워 복제본에게 전송하고, 팔로워가 이를 확인(acknowledge)하면 리더는 추가적인 메시지 기록을 허용합니다. 이 과정을 통해 복제본 간의 일관성이 유지됩니다. -
데이터 압축 및 해시
Kafka는 데이터 무결성을 보장하기 위해 데이터 블록에 CRC(순환 중복 검사, Cyclic Redundancy Check) 해시를 적용하여 데이터 손상이 발생하지 않았는지 확인합니다. 각 메시지의 CRC 해시값을 저장하고, 데이터를 읽을 때 이를 검증해 손상 여부를 파악합니다. -
트랜잭션 지원
Kafka는 트랜잭션을 지원하여 데이터의 일관성과 원자성을 보장합니다. 이는 여러 주제를 동시에 다루는 메시지를 그룹으로 묶어, 모두 성공하거나 모두 실패하는 방식으로 처리하여 부분적인 데이터 손실을 방지합니다. -
분산 로그 구조
Kafka는 데이터를 파티션이라는 단위로 분산 저장하며, 각 파티션은 순차적으로 로그에 기록됩니다. 이러한 분산 로그 구조는 데이터를 효율적으로 관리하고, 클러스터 내에서의 데이터 무결성을 높이는 데 기여합니다. -
복구 메커니즘
Kafka는 오프셋을 사용해 메시지의 위치를 관리하고, 브로커가 비정상 종료되었을 때도 마지막으로 처리된 메시지 위치부터 복구할 수 있습니다.
또한, 장애 발생 시 ISR을 기반으로 데이터 복제를 재개해 데이터 일관성을 유지합니다.
이러한 메커니즘을 통해 Kafka는 고가용성과 높은 데이터 무결성을 보장하면서 분산 시스템 환경에서도 안정적으로 데이터를 처리할 수 있습니다.
댓글남기기