카프카의 단위
프로듀서 : 카프카로 메세지를 보내는 역할을 함
카프카
- 프로듀서가 보낸 메세지를 저장하는 역할
- 주키퍼와 통신을 하면서 메타데이터 관리, 클러스터의 노드 관리
컨슈머 : 카프카가 저장한 메세지를 가져오는 역할
주키퍼 : 분산 코디네이터 시스템
카프카 구성
주키퍼의 경우 리플리케이션 방식이 쿼럼(quorum) 방식이기 때문에 홀수 유지 필수. 최소 수량인 3대 유지.
카프카(브로커)의 경우 리플리케이션 방식이 쿼럼 방식이 아니기 때문에 홀수든 짝수든 상관 없음.
카프카는 사용량이 몰려서 서버 증설이 필요한 경우 주키퍼는 그대로 유지하고 카프카(브로커)의 수를 늘리는 방향으로 스케일 업 함.
카프카는 하나의 토픽을 기준으로 프로듀서가 메세지를 보내고 컨슈머들이 붙여서 메세지를 받아가는 것이 일반적인 구조.
카프카는 데이터가 들어오는(In)보다 나가는(Out) 것이 1.5배 정도 되는게 이상적임.
카프카 트러블 슈팅
Shrinking ISR(v0.10.1.0)
ISR(In-Sync Replicase)이란?
리플리케이션의 구성원은 리더(Reader)와 팔로워(Follower)
- 리더(Reader) : 읽기 쓰기
- 팔로워(Follower) : 리더를 주기적으로 동기화
- ISR의 구성원만이 리더의 자격을 갖는다.
카프카의 로그는 총 3개(Info, Warning, Error)로 이루어짐. 그런데 당시에는 Warning, Error에 대한 로그가 감지되면 알림을 주도록 시스템을 설계했으나 해당 이슈는 Info 레벨의 로그였기 때문에 유지 보수 인력에게 알림이 가지 않음.
카프카 버전 업그레이드
- 다운타임을 가질 수 있는 환경
- 다운타임을 가질 수 없는 환경
- 클러스터 안의 브로커 한대씩 종류 후 버전 업그레이드 진행
프로듀서와 컨슈머
프로듀서
: 프로듀서가 카프카로 메세지를 보낼 때는 Push 방식으로 보냄. 따라서 프로듀서의 네트워크 속도로 데이터를 보내고 처리는 카프카가 함.
- 파티션의 리더로 직접 메시지를 전송
- 특정 파티션 또는 랜덤 파티션으로 전송
- 빠른 전송 속도 보장
- 효율성이 좋은 배치 처리 가능
- 설정을 통해 배치 크기나 지연시간 조정
프로듀서 ACKS 옵션
- ACKS = 0
- 매우 빠르게 전송할 수 있지만, 파티션의 리더가 받았는지 알 수 없음
- ACKS = 1(권장)
- 메시지 전송도 빠른편이고, 파티션의 리더가 받았는지 확인 가능
- 가장 많이 사용되는, 최근 대부분의 기본값으로 사용
- ACKS = ALL
- 메시지 전송 속도는 가장 느리지만, 손실 없는 메시지 전송 가능
프로듀서 Key 옵션
프로듀서가 토픽에 파티션으로 메세지를 보낼 때 Key 옵션을 붙여서 보낼 수 있는데 특정 포틱에 파티션이 여러개가 있음에도 불구하고 특정 파티션으로만 트래픽이 쏠리는 현상이 있다. key 값을 지정하게 되면 특정 파티션만으로만 전송하게 된다.
key 값은 필수가 아니고 기본은 None 값이 아무 입력 값 없이 보내게 되면 Round 방식으로 균등하게 파티션에 데이터가 보내진다.
요구사항에 특정 파티션에만 토픽을 보내야할 상황이 아니라면 key 값을 입력하지 않는 것이 좋음.
컨슈머
: 컨슈머는 카프카로부터 메세지를 받아갈 때는 Pull 방식으로 받음. 따라서 데이터를 받아온 다음 컨슈머에서 처리함.
- 파티션의 리더에게
fetch
요청을 하는 역할
- 데이터의 위치를 기록하고 있는 오프셋으로부터 메시지를 가져온다.
- 컨슈머의 목적은 컨슈머가 가능한 최대 속도로 가져갈 수 있도록 하는 것.
컨슈머는 파티션의 오프셋 순서만 보장함. 대신 파티션 순서는 전혀 관여 하지 않음. 따라서 timestamp로 다시 정렬을 해야함(의문).
컨슈머 그룹
- 하나의 토픽을 여러 컨슈머들이 구독을 할 수 있게 해준다.
- 컨슈머 그룹으로 그룹핑하여 컨슈머를 확장 할 수 있음.
- 프로듀서가 토픽으로 보내는 메시지 비율을 높인다면? : 컨슈머는 프로듀서의 속도를 따라지 못하게 된다. 어떠한 이벤트 때문에 프로듀서가 메시지를 많이 보내게 되는 상황이 되면 컨슈머 그룹 안에 컨슈머 인스턴스만 추가하여 컨슈머를 확장 가능하게 함.
- 하나의 파티션은 하나의 컨슈머만 연결 가능하다. 따라서 파티션이 3개가 있다면 컨슈머는 최대 3개까지만 가동이 되며 추가 하더라도 해당 컨슈머는 놀고 있게 됨.
- 컨슈머는 프로듀서의 속도를 따라가지 못하게 된다.
- 멀티 컨슈머 : 컨슈머 그룹을 하둡 컨슈머 그룹, 엘라스틱서치 컨슈머 그룹 이렇게 만들어서 하나의 토픽에 여러 개의 컨슈머들이 데이터를 가져오게 할 수 있다. 컨슈머 그룹 마다 해당 토픽에 특정 오프셋을 가지고 있기 때문에 서로에게 영향을 주지 않음.
LAG
: 컨슈머가 프로듀서로부터 메세지를 얼마나 밀리지 않고 받는지에 대한 지표.
프로듀서가 10개의 메세지를 보내고 컨슈머가 10개의 메세지를 받는 상황을 LAG = 0 이라고 한다.
프로듀서가 10개의 메세지를 보내고 컨슈머가 5개의 메세지를 받는 상황을 LAG = 5 이라고 한다.
Kafka Consumer LAG Checking
운영 이슈
미사용 토픽에 대한 고민
JMX(ava Management Extensions)로 토픽 상태값을 수집 저장 후 조건에 일치하는 토픽 삭제
출처
https://tv.kakao.com/channel/3150758/cliplink/391419257
https://www.slideshare.net/ifkakao/ss-113145591