반응형

/*
-- Title : [kfk] 레코드 쓰기/읽기 (Write/Read Record)
-- Tag : 아파치 카프카 apache kafka
*/


■ 카프카 파티션(Kafka Partition) 쓰기

카프카 파티션(Kafka Partition)은 생상자(프로듀서, Producer)가 레코드(Record)를 카프카 토픽(Kafka Topic)에 저장을 하게되면 실제 레코드를 저장하고 브로커(Broker)간 복제되는 영역으로 소비자(컨슈머, Consumer)가 병렬로 레코드를 읽어갈 수 있도록 제공한다.

• Kafka는 구조화된커밋 로그를 사용하여 지속적으로추가
• 파티션(Partition)별 라운드-로빈(round-robin) 방식으로 레코드 저장
• 생산자(프로듀서, Producer)가 레코드 기록시 파티션 내에서만 순서를 보장(전체 순서를 보장하지는 않음)

• 레코드(Record) 저장시 파티션별로 로프셋(offset)을 통해 위치 정보 식별
• 레코드는 보존 정책에 따라 보관되면 보존 기간이 지나면 공간확보위해 삭제됨
• 식별 키(Key)를 지정하게 되면 동일한 파티션에 기록되고 지정하지 않으면 라운드로빈 방식으로 저장됨


■ 카프카 파티션(Kafka Partition) 읽기

• Kafka가 데이터를 읽기 위해 가장 먼저 읽을 위치 결정
• 읽을 위치를 오프셋(Offset)이라고 하고 저장시 값이 기록됨
• 소비자(컨슈머, Consumer)가 이미 읽거나 중단시 주키퍼(Zookeeper)에 오프셋 업데이트
• 오프셋을 통해 어떤 Fail-over에 대한 처리 가능

ㅁ 데이터 읽기 3가지 전략

• At most once : 레코드 손실 위험 높음, 읽기/커밋/처리/저장 단계가 각각 적용
• At least once : 가장 추천되는 전략, 레코드 처리에 대한 오류 확인, 읽기/커밋/처리/저장 단계가 각각 적용
• Exactly once : 레코드를 하나의 트랜잭션으로 보관/처리, 성능 저하, 


■ 소비자(컨슈머, Consumer)의 레코드 읽기

• 소비자(컨슈머, Consumer)는 각 파티션(Partition)에 있는 오프셋(Offset)을 차례로 읽음
• 하나의 소비자가 여러 파티션을 가진 경우 전체 순서대로 가져오지 못하고 한 파티션 내에서만 순서를 보장함


■ 소비자 그룹(Consumer Group)의 레코드 읽기

소비자 그룹(Consumer Group)은 하나의 토픽(Topic)에 대한 책임을 가지기에 그룹(Group)내 어떤 소비자(Consumer)가 역할을 못하게 되면 다른 소비자가 대신 그 역할을 하게 하는 Rebalnceing이 되어 토픽(Topic)의 레코드(Record)를 무결하게 가져올 수 있도록 한다.

• 파티션과 소비자 그룹 내 소비자 = 1 : n 으로 매칭되어야 함
    즉, 하나의 파티션은 반드시 하나의 소비자와 연결되어야 해서 파티션 확장시 소비자 개수 고려 필수
• 소비자 그룹(Consumer Group) 내 소비자(Conosumer)는 여러 파티션(Partition) 읽기 가능
• 파티션이 모두 할당된 경우 소비자 그룹 내 소비자는 IDLE 상태가 됨(적절한 조정 필요)


※ 참고자료
• data-flair.training/blogs
docs.confluent.io
www.cloudkarafka.com/blog

 

반응형

+ Recent posts