2021.05.04 - [프로그래밍 노트/인프라] - [kafka] 카프카 고가용성과 리플리케이션(장애 극복 방법)
- 대용량의 실시간 데이터 처리
- 배치 전송, 파티션, 분산 기능 구현
- 고가용성
- 중앙 시스템 역할을 하는 중요한 서비스에서 장애가 발생하더라도 서비스에 영향이 없도록 데이터의 안정적인 저장을 위해 리플리케이션 기능과 분산된 서버에서 자동으로 파티션의 리더를 선출하는 기능을 구현
카프카 디자인 특징
1. 분산 시스템
분산 시스템 장점
- 단일 시스템보다 더 높은 성능
- 하나의 서버(노드) 등이 장애가 발생하면 다른 서버(노드)가 대신 처리
- 시스템 확장 용이
2. 페이지 캐시
처리량을 높이기 위한 전략으로 페이지 캐시 기능 추가
- 빠른 액세스를 하기 위해 OS의 페이지 캐시를 이용하도록 디자인
- 페이지 캐시는 서로 공유하기 때문에 하나의 시스템에 카프카를 다른 애플리케이션과 함께 실행하는 것을 권장하지 않음.
페이지 캐시
OS는 물리적 메모리 애플리케이션이 사용하는 부분을 할당하고 남은 잔여 메모리 일부를 페이지 캐시로 유지하여 OS의 전체적인 성능 향상을 높임
디스크 접근을 최소화 하여 파일 I/O 성능을 향상시키기 위한 메모리 영역이라고 보면됨(한 번 읽은 파일의 내용을 이 페이지 캐시 영역에 저장)
3. 배치 전송 처리
- 작은 I/O가 빈번하게 일어나면 속도를 저하시키기 때문에 카프카는 작은 I/O들을 묶어서 한번에 배치 작업으로 처리
- 메시지 보내는시간을 1초라고 가정
- 메시지 4개 - 총 4초 소요
- 4개 메시지를 한번에 보내면 네트워크 왕복 오버헤드 등을 줄이게 되어, 1초의 시간이 소요
카프카 데이터 모델
고성능 ,고가용성 메시징 애플리케이션을 만들기 위해 토픽/파티션 이라는 개념을 만듬
- 토픽 : 메시지를 받을 수 있도록 논리적으로 묶은 개념
- 파티션 : 토픽을 구성하는 데이터 저장소로서 수평 확장이 가능한 단위
1. 토픽의 이해
토픽 이름 | 토픽 설명 |
sbs-news | sbs에서 뉴스 용도로 사용하는 토픽 이름 |
sbs-video | sbs에서 동영상 용도로 사용하는 토픽 이름 |
2. 파티션의 이해
파티션은 토픽을 분할한 것이다. 왜 하나의 토픽을 파티셔닝 하는 것일까?
메시지를 하나 보내는 데 걸리는 시간을 1초로 가정
A 메시지 전송 완료 후 → B 메시지 전송 → C 메시지 전송 → D 메시지 전송 ⇒ 총 4초 소요
파티션을 나누면 메시지를 좀 더 효율적으로 빠르게 전송할 수 있음
메시지를 하나 보내는 데 걸리는 시간을 1초로 가정
병렬적으로 A,B,C,D 메시지를 전송 ⇒ 총 1초 소요
프로듀서만 4개로 변경하고 파티션을 1개 유지하면 안될까?
메시징 큐 시스템의 경우 메시지 순서 가 보장되어야 하기 때문에 이전 메시지 처리가 완료된 후 다음 메시지를 처리하게 되어 있음. 따라서 파티션을 늘려줘야 성능상 이점을 가져갈 수 있음
무조건 파티션 수를 늘려야 하나?
항상 그렇지는 않음
- 파일 핸들러의 낭비
- 파티션은 브로커의 디렉토리와 매핑되고, 저장되는 데이터마다 2개의 파일(인덱스, 실제파일) 존재. 카프카에서는 모든 디렉토리의 파일들에 대해 파일 핸들러를 열기 때문에, 파티션이 많으면 리소스를 낭비하게 됨
- 장애 복구 시간 증가
- 고가용성을 위해 리플리케이션을 지원. 각 파티션마다 리플리케이션이 동작되며, 하나는 파티션 리더 하나는 팔로워가 됨
- todo 읽어보자
토픽의 적절판 파티션 수는?
- 프로듀서, 컨슈머의 처리량을 고려해서 정해야함.
- 파티션을 늘리는건 가능하지만, 삭제는 토픽 전체를 삭제해야함 (적은 수의 파티션을 운영한 후 점차 늘려나가야 함)
- 카프카에서는 브로커당 약 2,000개 정도의 최대 파티션 수를 권장함
3. 오프셋과 메시지 순서
파티션마다 메시지가 저장되는 위치를 오프셋(offset)이라고 부름.
오프셋은 파티션 내에서 유일하고 순차적으로 증가하는 숫자(64bit)형태로 되어 있음
- 컨슈머는 오프셋 순서대로 데이터를 가져갈 수 있음
참고)
http://ldg.pe.kr/Wiki.jsp?page=Kafkaboot1_ch3_kafkadesign
카프카, 데이터 플랫폼의 최강자
'프로그래밍 노트 > 인프라' 카테고리의 다른 글
[kafka] Docker 사용하여 카프카 실행하기 (0) | 2021.06.20 |
---|---|
[kafka] 카프카 고가용성과 리플리케이션(장애 극복 방법) (0) | 2021.05.04 |
[Kafka] 주키퍼(zookeeper)란 무엇인가? (2) | 2021.04.30 |
젠킨스 Master/Slave 분산 빌드 환경 도커로 구축하기 (1) | 2021.01.30 |
ScaleOut, ScaleUp (스케일아웃, 스케일업) (0) | 2021.01.24 |