3.1 카프카 기초 다지기
카프카를 구성하는 주요 요소
- 주키퍼: 카프카 메타데이터 관리 및 브로커 정상상태 점검을 담당
- 카프카 클러스터: 여러 대의 브로커를 구성한 클러스터
- 브로커: 카프카 애플리케이션이 설치된 서버 또는 노드
- 프로듀서: 카프카로 메시지를 보내는 역할을 하는 클라이언트를 총칭
- 컨슈머: 카프카에서 메시지를 꺼내가는 역할을 하는 클라이언트를 총칭
- 토픽: 카프카는 메시지를 토픽으로 구분하고 각 토픽 이름은 카프카 내에서 고유하다.
- 파티션: 병렬 처리 및 고성능을 위해 하나의 토픽을 여러 개로 나눈 것을 의미
- 세그먼트: 프로듀서가 전송한 메시지가 브로커 로컬 디스크에 저장되는 실제 파일
- 메시지 또는 레코드: 프로듀서, 컨슈머가 주고 받는 데이터 조각
3.1.1 리플리케이션
- 리플리케이션은 각 메시지를 여러 개로 복제해 카프카 클러스터 내 브로커들에 분산시키는 동작을 의미한다.
- 덕분에 브로커가 종료되더라도 안정성을 유지 가능
- 토픽을 만들 때 명령어로 리플리케이션 설정을 할 수 있다.
—partition 1, —replication-factor 3
- 리플리케이션 3개를 만드는 명령어
- 토픽이 아닌, 토픽의 파티션이 리플리케이션되는 것
- 리플리케이션 팩터 수에 따라 안정성이 결정되지만 그만큼 리소스를 사용하게 되니 기준을 두고 설정해야 한다.
- 테스트나 개발 환경: 팩터 수를 1로 설정
- 운영 환경(로그성 메시지로서 약간의 유실 허용) 팩터 수를 2로 설정
- 운영 환경(유실을 허용하지 않음): 팩터 수를 3으로 설정
- 저자의 경험으로 대부분의 경우 팩터 수가 3일 때 안정성과 디스크 공간이 적절했다고 한다.
3.1.2 파티션
- 하나의 토픽의 처리량을 늘리기 위해 병렬 처리가 가능하게 만든 것을 파티션이라 한다.
- 나뉜 파티션 수만큼 컨슈머를 연결할 수 있다.
- 파티션 번호는 0부터 시작한다.
- 토픽 당 파티션 수를 결정하는 기준이 다소 모호한 경우가 많다.
- 공식도 간혹 있지만 각 메시지 크기나 건수에 따라 다르므로 정확히 예측할 순 없다.
- 파티션 수는 언제든 늘릴 수 있지만 줄일 순 없기에 초기 파티션 수를 적게 하고 점차 늘려가야 한다.
- 컨슈머의 LAG란 ‘프로듀서가 보낸 메시지 수 - 컨슈머가 가져간 메시지 수’를 나타낸다.
- 컨슈머가 지연 없이 모든 메시지를 소비하면 LAG가 0이다.
- LAG를 통해 지연을 체크할 수 있다.
3.1.3 세그먼트
- 프로듀서가 보낸 메시지는 토픽의 한 파티션에 저장된다.
- 파티션 내 세그먼트라는 로그 파일 형태로 브로커 로컬 디스크에 저장되는 것
- 파티션 내에 N개의 세그먼트 로그 파일들이 존재한다.