세미나 발표를 위해 이곳저곳 헤집다가
발견한 유튭 자료를 정리하고 발표 형식으로 바꾸었다
내가 이해가 안되는 부분들은 이렇게 작은 박스에 내 생각과 결론을 찾아 적었다

과거 서버들은 하나로 구성돼있는 단일구조였다.
그 구조들은 monolithic이라고 부른다.
이 구조는 하나의 서버에 하나의 데이터베이스를 연결해
모든 서비스를 처리하는 구조이다.
개발 초기에는 관리와 배포가 간단하고
단일 애플리케이션으로 모든걸 처리하기 때문에 인프라 복잡도와 비용이 낮다
하지만 서비스가 커질수록 문제가 생긴다

고성능 분산 이벤트 스트리밍 플렛폼

메시지를 저장하는 저장소
카프카 클러스터를 관리하는 역할
메세지를 카프카에 넣는 역할
메세지를 카프카에서 읽음
토픽 : 메세지를 구분하는 논리적 단위
파티션 : 메세지를 저장하는 물리적 파일

파티션은 추가만 가능한(append-only) 파일

컨슈머는 컨슈머 그룹에 속함
한 개 파티션은 컨슈머 그룹의 한 개 컨슈머만 연결 가능
이해가 안된부분
Q.왜 그룹은 파티션을 공유하지 않는가 ?
A.예를 들어서
로그인 처리 그룹A가 있고
그룹 안에는 처리담당1,2가 있다고 가정해보자
처리담당 1은 브로커 0의 토픽1-파티션1 을 담당하고
처리담당 2는 브로커 0의 토픽1-파티션2 를 담당하면 분산처리가 가능하므로
같은 그룹끼리는 한개의 파티션을 공유하지 않는다
파티션 파일은 OS 페이지 캐시 사용
일반적으로는
[어플리케이션 -> OS -> 디스크] 과정을 거쳐 저장한다
근데 카프카가 메시지를 저장할때는 OS의 빈 공간에 먼저 기록하고 나중에 처리함
읽을때도 마찬가지로 OS캐시를 먼저 보고 처리하므로 속도가 빠르다
Zero Copy
일반적인 데이터 전송 과정
디스크 -> 커널 영역 -> 유저영역 -> 커널영역-> 네트워크 버퍼
카프카는 OS의 sendfile 시스템 콜을 이용
디스크 -> 커널 -> 네트워크 영역
CPU가 데이터를 유저영역으로 복사하지 않으므로 일이 줄어듦 그래서 Zero Copy
리플리카 : 파티션의 복제본