Data Engineer
Apache kafka (카프카) 기초
jssvs
2022. 8. 19. 00:02
반응형
1. 카프카란?
- 분산 이벤트 큐.
- 분산 이벤트 스트리밍 플랫폼
- 카프카 컨슈머, 프로듀서, 스트림즈, 커넥트 등 연동 API 제공
- 초당 수백만개 데이터를 처리할수 있으므로 빅데이터에 적합
- 분산 데이터를 통해 24시간 365일 안전하게 데이터를 처리할 수 있는 고가용성 기능 제공
2. 왜 카프카?
- 고가용성
- 서비스에 지장없는 운영을 보장.
- 낮은 지연
- 확장성
- 높은 처리량
- 높은 처리량을 감당하지 못한다면, 서비스를 유지하기 힘듦
3. 카프카 구성 요소
브로커
- 설치된 카프카의 서버 단위
- 보통은 3대로 구성
주키퍼
- 코디네이션 애플리케이션
- 브로커 서버와 통신하며 상태관리, 컨슈머와의 통신, 카프카 메타데이터 정보를 저장함.
토픽
- 구체화된 이벤트 스트림 = 쉽게 큐로 이해하면 됨
- 하나의 토픽에 여러 Producer / Consumer 가 존재할 수 있다.
- 토픽은 담는 데이터에 따라 이름을 줄 수 있다.
컨슈머
- 카프카와 통신하면서 메세지를 구독함
- 기본적으로 가장 오래된 순서대로 가져감 - 0번 오프셋부터
- 새로운 컨슈머가 구독을 하게 되도 가장 오래된 순서대로 가져감
- auto.offset.reset = earliest 인경우
프로듀서
- 카프카와 통신하면서 메세지를 생산함
파티션
- 카프카의 토픽들은 여러 파티션으로 나눠짐.
- 파티션의 끝에서 0번 부터 차곡차곡 쌓이게 됨
- 토픽 = 논리적인 개념이라면, 파티션은 물리적인 저장소에 저장하는 단위
- 각 파티션은 Append-only 방식으로 기록됨
- 특정 파티션으로 데이터를 쓸수 있고, 명시되있지 않으면 RoundRobin 방식으로 파티션을 배정한다
- 파티션을 늘린다면?
- 파티션을 다시 줄일수는 없다.
- 컨슈머 개수가 늘어날때 분산 처리할 수 있다.
- 신규 데이터는 2개의 파티션 중어디로 들어갈까?
- 보통은 라운드로빈으로 파티션을 할당함
- 키의 해시값으로 저장.
- 파티션 삭제 주기는?
- log.retention.ms : 최대 record 보존 시간
- log.retension.byte : 최대 record 보존 크기
오프셋
- 각각 파티션의 레코드는 Offset 식별자 정보를 가짐, 데이터 번호
- 카프카는 메세지 순서를 보장 하지 않음. 하지만 파티션이 1개라면 보장할지도?
파티셔너
- 데이터를 토픽에 어떤 파티션에 넣는지 결정하는 역할을 함
- 메세지 키 또는 메세지 값에 따라 파티션이 결정됨
- hash(키) = 파티션 넘버
레플리케이션
- replication 이 1인 토픽은 하나의 브로커에만 저장됨.
- replicaion 이 2라면 원본 하나, 복제본 1개의 포티션이 2개의 브로커에 저장됨
- 따라서 replication 개수 ≤ 브로커 서버 개수
- 원본 파티션 = Leader 파티션, 복제본 파티션 = follow 파티션
반응형