Kafka
카프카 컨슈머와 그룹 코디네이터
컨슈머 오프셋 관리 컨슈머의 동작 중 가장 핵심은 오프셋 관리. 오프셋이란 메시지의 위치를 나타내는 위치 컨슈머는 카프카에 저장된 메시지를 꺼내오는 역할을 하기 때문에 컨슈머가 메시지를 어디까지 가져왔는지를 표시하는 것은 매우 중요. 컨슈머 그룹은 자신의 오프셋 정보를 카프카에서 가장 안전한 저장소인 토픽에 저장. __consumer_offsets 토픽에 각 컨슈머 그룹별로 오프셋 위치 정보가 기록됨. 모든 컨슈머 그룹의 정보가 저장되는 __consumer_offsets 토픽은 파티션 수와 리플리케이션 팩터 수를 갖고 있으며, 내부 토픽이지만 파티션 수와 리플리케이션 팩터수는 브로커의 설정 파일인 server.properties에서 변경 가능. offsets.topic.num.partitions (기본값..
카프카 프로듀서
파티셔너 카프카의 토픽은 성능 향상을 위한 병렬 처리가 가능하도록 하기 위해 파티션으로 나뉩니다. (최소 하나 또는 둘 이상의 파티션) 그리고 프로듀서가 파티션으로 전송한 메시지는 해당 토픽 내 각 파티션의 로그 세그먼트에 저장된다. 따라서 프로듀서는 토픽으로 메시지를 보낼 때 해당 토픽의 어느 파티션으로 메시지를 보내야 할지를 결정해야 하는데 이때 사용하는 것이 파티셔너. 프로듀서가 파티션을 결정하는 알고리즘은 기본적으로 메시지(레코드)의 키를 해시처리해 파티션을 구하는 방식을 사용해서 메시지의 키 값이 동일하면 해당 메시지들은 모두 같은 파티션으로 전송된다. 주의할 점은 프로듀서가 동일한 메시지의 키를 이용해 메시지를 전송하더라도 파티션의 수를 늘린 후에는 다른 파티션으로 전송될 수 있다. 따라서 메..
Kafka Log Segment
로그 세그먼트 카프카의 토픽으로 들어오는 레코드는 세그먼트라는 파일에 저장된다. 메시지는 정해진 형식에 맞추어 순차적으로 로그 세그먼트 파일에 저장된다. 로그 세그먼트에는 메시지의 내용만 저장되는 것이 아니라 메시지의 키, 밸류, 오프셋, 메시지 크기와 같은 정보가 함께 저장됨, 로그 세그먼트 파일들은 브로커의 로컬 디스크에 보관된다. 하나의 로그 세그먼트 크기가 너무 커져버리면 파일을 관리하기 어렵기 때문에, 로그 세그먼트의 최대 크기는 1GB가 기본값으로 설정되어 있음. 로그 세그먼트가 1GB보다 커지는 경우 기본적으로 롤링 전략을 사용 하나의 로그 세그먼트에 카프카로 인입되는 메시지들을 계속 덧붙이다가 로그 세그먼트의 크기가 1GB에 도달하면 해당 세그먼트 파일을 클로즈하고, 새로운 로그 세그먼트를..
카프카 리플레이션 동작 방식
카프카 리플리케이션 일시적인 하드웨어 이슈 등으로 브로커 한두 대에서 장애가 발생하더라도 안정성을 확보하기 위해 카프카 내부에서는 리플리케이션이라는 동작을 하게 된다. 리더와 팔로워 카프카는 내부적으로 모두 동일한 리플리케이션들을 리더와 팔로워로 구분하고, 리플리케이션 중 하나가 리더로 선정되며, 모든 읽기와 쓰기는 그 리더를 통해서만 가능. 프로듀서에서는 모든 리플리케이션에 메시지를 보내는 것이 아니라, 리더에게만 메시지를 전송한다. 또한 컨슈머도 오직 리더로부터 메시지를 가져온다 팔로워는 컨슈머와 비슷하게 지속적으로 파티션의 리더가 새로운 메시지를 받았는지 확인하고, 새로운 메시지가 있다면 해당 메시지를 리더로부터 복제한다. 복제 유지와 커밋 리더와 팔로워는 ISR(InsyncReplica)라는 논리..
[실전 카프카 개발부터 운영까지 정리] 6장. 컨슈머 내부 동작
http://www.yes24.com/Product/Goods/104410708 해당 책을 공부하며 정리한 내용입니다. 실전 카프카 개발부터 운영까지 - YES24 아파치 카프카의 공동 창시자 준 라오(Jun Rao)가 추천한 책!국내 최초이자 유일한 컨플루언트 공인 아파치 카프카 강사(Confluent Certified Trainer for Apache Kafka)와 공인 관리자 자격(Confluent Certified... www.yes24.com 컨슈머 오프셋 관리 컨슈머 동작 중 가장 핵심은 오프셋 관리로, 카프카에서 메시지의 위치를 나타내는 위치를 오프셋이라고 한다. 예를 들어 컨슈머가 일시적으로 동작을 멈추고 재시작하는 경우나, 컨슈머가 구동 중인 서버에 문제가 발생해 새로운 컨슈머가 기존 컨..