Open manjeong-dev opened 2 years ago
브로커의 컨트롤러는 그럼 복제 대상에서 빠지나? 아님 부가적인 일을 하는 걸까?
삭제(delete, compact)는 세그먼트 내에서만 발생? 다른 세그먼트는 compact 영향 안받음?
로그와 세그먼트 차이 프로듀서-브로커-파티션 연관관계
하나의 주키퍼로 클러스터를 묶는 단위는?
브로커 당 토픽 n개, 토픽은 n개의 파티션
Q1. 특정 브로커 다운시, 해당 브로커가 가지고 있던 리더 파티션들을 다시 선출하는 주체는? 주키퍼 팔로워 파티션을 가진 브로커들 파티셔너 카프카전문가 태선님 컨트롤러
Q2. 컨슈머 처리량이 많이 필요하지않다면 파티션 개수를 줄이면된다 (O/X)
Q3. 카프카 프로듀서 또는 컨슈머 대신 카프카 커넥트를 썼을때 장점 2개는?
Q4. 카프카가 빠른 쓰기/읽기가 가능하지만 이미 쓰여진 메세지는 변경이 불가한 이유는 레코드를 [ ] 자료구조 형태로 저장하기 때문이다. 트리(Tree) 자료구조 로그(Log) 자료구조 스택(Stack) 자료구조 링크(Link) 자료구조
Q5. 일반적인 데이터 삭제 단위는? 데이터 레코드 단위 토픽에 포함된 데이터 전체 파일단위로 이루어진 로그 세그먼트 물리 디스크의 특정 directory 단위
Q6. 운영시 특정 브로커에 리더 파티션이 쏠리는 현상이 발생할 경우 대응할 수 있는 방안은? 수동으로 옮겨준다. 파티셔너가 설정한 주기마다 자동으로 옮겨주므로 따로 할건 없다. kafka-reassign-partitions.sh 스크립트로 파티션을 재분배해준다. 해당 브로커에 장애를 일으켜서 다시 리더 파티션을 선출한다.
Q7. 토픽 내 특정 키에 대한 처리 순서 보장이 필요하다면 프로듀서에서 메시지 전송시 offset을 지정해주면 된다. (O/X)
Q8. 브로커에 저장되는 데이터 파일 종류에 맞지 않은 것은? .index .timeindex .segment .log
Q9. cleanup.policy=delete 와 cleanup.policy=compact 옵션에 차이점은?
Q10. 토픽이 생성되었을 때 리더 파티션이 선출되는 방식은 [] 방식이다.
Q11. 카프카 클라이언트가 메타데이터 요청을 하는 주요한 이유는 무엇인가? 리더 파티션의 위치 토픽 이름 세그먼트 정보 파티션 개수
Q1. 5 Q2. X 파티션은 다시 줄일 수 없다 Q3. 카프카 커넥트는 대표적으로 다음과 같은 5가지 특징을 가지고 있다. 데이터 중심 파이프라인 : 카프카 커넥트를 이용해 카프카로 데이터를 보내거나, 카프카로 데이터를 가져옴 유연성 : 커넥트는 테스트를 위한 단독 모드(standalone mode)와 대규모 운영 환경을 위한 분산 모드(distributed mode)를 제공 재사용성과 확장성 : 커넥트는 기존 커넥터를 활용할 수도 있고 운영 환경에서의 요구사항에 맞춰 확장이 가능 편리한 운영과 관리 : 카프카 커넥트가 제공하는 REST API로 빠르고 간단하게 커넥트 운영 가능 장애 및 복구 : 카프카 커넥트를 분산 모드로 실행하면 워커 노드의 장애 상황에도 메타데이터를 백업함으로써 대응 가능하며 고가용성 보장 https://minkwon4.tistory.com/319 Q4. 2 로그는 마지막 offset 가지고 있음, 중간에 있는 데이터의 offset은 없음 세그먼트 단위로 삭제 가능 Q5. 3 Q6. 3 Q7. X 메시지 키를 똑같이 지정해주면 같은 파티션으로 들어가서 순서 보장해줌 Q8. 3 Q9. delete 는 세그먼트 전체를 삭제, compact 는 컴팩트 로직을 가지고 세그먼트 내에 메시지키를 단위로 삭제해 메시지키별로 가장 최근에 남아있는 메시지키만 남김. Q10. round-robin assignor로 지정가능 sticky.. 등 https://blog.voidmainvoid.net/361 Q11. 1 4번, availablePartition 갯수 등도 메타데이터 요청을 할 수 있음
MirrorMaker2
클러스터 단위로 카프카를 운영할 때 토픽에 있는 데이터를 완벽하게 복제하기 위해 사용
주키퍼
클러스터
카프카 브로커
false(해당 브로커가 복구될 때까지 중단)
토픽 & 파티션
토픽
파티션
토픽 생성시 파티션은 0번 브로커부터 시작하여 round-robin 방식으로 leader partition 생성
파티션 : 컨슈머 = 1:1 (병렬 처리)
파티션 개수 줄이는 건 불가능
토픽을 삭제하고 재생성하는 방법 외에는 없음
파티션의 데이터를 세그먼트로 저장하고 있음 > 여러 브로커에 저장된 데이터를 취합하고 정렬해야 함
레코드
브로커로 레코드가 전송되면 offset, timestamp 가 지정되어 저장됨 (프로듀서의 레코드에는 없음)
브로커에 한번 적재되면 수정 x, log retention 기간 또는 용량에 따라서만 삭제됨
timestamp
offset
key
메시지 값
프로듀서-컨슈머가 직렬화/역직렬화 포맷을 알아야 함
토픽 이름은 생성 후 수정이 안됨!!! 클라이언트 메타데이터
리더 partition의 위치를 알기 위해
프로듀서와 컨슈머가 데이터를 주고받기 전 브로커로부터 전달 받음
metadata.max.age.ms : 메타데이터 강제 리프래시 간격(기본 5분)
metadata.max.idle.ms : 프로듀서가 유휴상태일 경우 메타데이터를 캐시에 유지하는 기간(기본 5분)
LEADER_NOT_AVAILABLE exception : 잘못된 메타데이터로 인해 리더파티션이 올바르지 않을 경우