반응형
6.1 브로커 소개
브로커는 다른 브로커와 협력하여 시스템의 핵심을 형성한다.
6.2 주키퍼의 역할
- 브로커 작동방식에서 핵심 파트이며 카프카를 실행하기 위한 요구사항이다.
- 주키퍼 자체는 클러스터의 토픽과 같은 정보를 보유한다.
- 주키퍼는 할당과 통지를 코디네이트하여 브로커를 돕는다. 브로커와의 이러한 상호 작용 때문에 브로커를 시작하기 전에 주키퍼를 먼저 실행해야 한다. 주키퍼 클러스터 상태는 카프카 브로커의 상태에 영향을 미친다. 예를 들어, 주키퍼 인스턴스가 손상된 경우 토픽 메타데이터와 구성이 손실될 수 있다.
- 카프카 브로커는 다른 브로커와 조율할 수 있을 뿐만 아니라 주키퍼와 대화할 수 있다.
6.3 브로커 수준의 옵션
- 구성은 카프카 클라이언트, 토픽, 브로커 작동에 있어 중요한 부분이다.
- 예를 들어 log.dirs 구성 속성은 항상 셋업에 적합한 로그 위치로 설정되어야 한다.
- 리스너, 로그 위치, 로그 보존 기간, 주키퍼, 그룹 코디네이터 관련 설정을 한다.
6.3.1 카프카의 다른 로그: 애플리케이션 로그
- 카프카는 애플리케이션 내부에서 진행 중인 작업을 알려주는 로그를 제공한다.
- 애플리케이션 로그는 카프카 기능 세트의 근간을 이루는 레코드 로그와는 무관하다.
- kafka.logs.dir 값을 편집하면 이 위치를 바꿀 수 있다.
6.3.2 서버 로그
- server.log는 브로커를 종류하는 시작 오류 또는 예외가 있는지 확인하는 위치이다.
- 이 로그는 각 브로커에 위치하며 기본적으로 한 곳으로 집계되지 않는다. 집계를 위해서는 Splunk 같은 도구를 사용할 수 있다.
6.3.3 상태 관리
- 파티션에는 리더 레플리카가 1개씩 있고, 이는 주어진 시간에 단일 브로커에 상주하게 된다.
- 브로커는 여러 파티션의 리더 레플리카를 호스팅할 수 있고, 클러스터의 모든 브로커는 리더 레플리카를 호스팅할 수 있다.
- 클러스터에서 하나의 브로커만 컨트롤러 역할을 수행할 수 이쓴데, 컨트롤러의 역할은 클러스터를 관리, 파티션 재할당 같은 관리작업을 수행한다.
- 클러스터의 롤링 업그레이드, 한 번에 하나의 브로커 종료 및 재시작을 고려할 때는 컨트롤러를 마지막에 수행하는 것이 좋다. 그렇지 않다면 컨트롤러를 여러 번 다시 시작하게 될 수도 있다.
6.4 파티션 리더 레플리카와 그 역할
- 토픽은 파티션으로 구성되며, 파티션은 내결함성을 위해 레플리카를 가질 수 있다.
- ISR(동기화 상태 레플리카) 목록은 리더에 의해 유지 관리되기 때문에, 어떤 레플리카가 최신 상태이고 모든 현재 메시지를 보았는지도 알고 있다.
- 카프카에서 주목해야할 세부사항 중 하나는 레플리카가 기본적으로 자체 복구되지 않는다는 것이다. 파티션 사본 중 하나가 존재하는 브로커를 잃어버리면 카프카는 새 사본을 생성하지 않는다.
- 시스템을 모니터링할 때 중요한 항목은 얼마나 많은 ISR 이 실제로 우리가 원하는 수와 일치하는지다.
6.4.1 데이터 손실
- ISR 이 없고 장애로 인해 리더 레플리카가 손실되었을 때, 'unclean.leader.election.enable' 값이 true 이면 레플리카가 최신이 아니더라도 시스템이 계속 선택되도록 파티션의 리더를 선택한다. 이는 손실 데이터 비용을 감수하는 대신 클라이언트는 계속 서비스를 제공받게 해준다.
6.5 카프카 엿보기
6.5.1 클러스터 유지 관리
- 프로덕션으로의 이동을 고려할 때 둘 이상의 서버를 구성하려고 한다.
- 카프카, 커넥트 크리언트, 스키마 레지스트리, REST 프록시와 같은 다양한 생태계가 일반적으로 브로커 자체와 동일한 서버에서 실행되지 않는다.
6.5.2 브로커 추가
- 클러스터에 카프카 브로커를 추가하려면 고유한 ID 로 새 카프카 브로커를 시작하기만 하면 된다.
- ID 는 broker.id 속성을 사용하거나 broker.id.generation.enable 속성을 true로 하면 만들 수 있다.
- 새 브로커에 파티션이 자동으로 할당되진 않는다.
- 새 브로커를 추가하기 전에 생성한 모든 토픽과 파티션은 생성당시 존재했던 브로컼에 계속 유지된다.
6.5.3 클러스터 업그레이드
- 카프카 애플리케이션의 다운타임을 방지하는데 사용할 수 있는 한 가지 기술은 롤링 재시작이다.
- 이는 한 번에 하나의 브로커만 업그레이드 하는 것이다.
- controlled.shutdown.enable을 true 로 설정하면 브로커가 종료되기 전에 파티션 리더십을 이전할 수 있다.
6.5.4 클라이언트 업그레이드
- 카프카는 브로커와 클라이언트 버전은 양방향 호환을 위해 최신 버전으로 함께 업그레이드 하는 것이 좋다.
6.5.5 백업
- 카프카에는 데이터베이스에서 사용하는 것과 같은 백업 전략이 없다.
- 카프카 로그는 디스크에 존재하므로 전체 파티션 디렉터리를 복사하면 될 거 라고 생각하지만, 그렇지 않다.
- 수동 복사를 수행하고 브로커 간 코디네이트 하는 대신 클러스터가 또 다른 클러스터에 의해 지원되는 방식을 고려할 수 있다. 그런 다음 두 클러스터 사이 토픽 간 이벤트를 복제한다. 프로덕션 설정에서 볼 수 있는 가장 초기 도구 중 하나는 MirrorMaker이다.
반응형
'도서기록 > 카프카인액션' 카테고리의 다른 글
08 카프카 스토리지 (0) | 2025.02.23 |
---|---|
07 토픽과 파티션 (0) | 2025.02.15 |
05 컨슈머: 데이터 열기 (0) | 2025.01.19 |
04 프로듀서: 데이터 공급 (0) | 2025.01.12 |
03 카프카 프로젝트 (1) | 2025.01.05 |