디스크에 메시지 저장
멀티 프로듀서, 멀티 컨슈머
분산형 스트리밍 플랫폼
페이지 캐시
카프카는 잔여 메모리를 이용해 디스크 Read/Write 를 하지 않고 페이지 캐시를 통한 Read/Write으로 인해 처리속도가 매우 빠름
배치 전송 처리
카프카는 기본적으로 토픽과 파티션이라는 데이터 모델이 존재
메시지를 논리적으로 묶은 개념 (데이터베이스의 테이블 / 파일시스템의 폴더와 유사한 개념)
프로듀서가 메시지를 보낼경우 토픽에 메시지가 저장됨.
여러개의 프로듀서에서 한개의 파티션으로 메시지를 보낼 경우 병목이 생기고, 메시지의 순서를 보장할 수 없게 됨
그렇기에, 파티션을 여러개로 늘리고 그 수만큼 프로듀서도 늘려 하나의 파티션마다 하나의 프로듀서 메시지를 받으면 훨씬 빠름
그렇다면 파티션은 많을 수록 좋은가?
오프셋(offset)
컨슈머가 메시지를 소비하는 시간보다 프로듀서가 메시지를 전달하는 속도가 더 빨라서 메시지가 점점 쌓일 경우를 대비하여
동일 토픽에 대해 여러 컨슈머가 메시지를 가져갈 수 있도록 컨슈머 그룹이라는 기능을 제공
아래와 같이 하나의 consumer가 프로듀서의 메시지 전송 속도를 따라가지 못할 경우
아래와 같이 컨슈머를 확장하여 하나의 파티션 당 하나의 컨슈머가 연결되도록 할 수 있음 (리밸런스, rebalance)
하나의 파티션 당 하나의 컨슈머가 1:1 연결되어야 하므로 아래와 같이 확장할 수는 없음
컨슈머 그룹은 컨슈머가 일정한 주기로 하는 하트비트(컨슈머가 poll()하거나 메시지의 오프셋을 커밋할때 보냄)를 통해 컨슈머가 메시지를 처리하고 있다는 것을 인지하며, 만약 오랫동안 하트비트가 없다면 해당 컨슈머의 세션이 타임아웃되고 리밸런스를 수행
카프카의 메시지 큐 시스템은 큐에서 메시지를 가져가도 사라지지 않기 때문에 여러 컨슈머 그룹이 동일 토픽에 붙을 수 있음
Producer의 메시지 배치 처리 성능 비교
Consumer 메시지 수신 처리 성능 비교
좋은 글 감사합니다! 글을 읽고 의문이 생겨서 댓글 남깁니다. 메시지 순서 부분을 보면 파티션에서 카프카는 메시지 순서를 보장하지 않는다고 써주셨습니다. 다른 블로그의 테스트 결과를 보니 정말로 순서가 뒤죽박죽 이더군요. 그런데 마지막 래빗과 카프카 등을 비교하는 문단에서 카프카에 메시지 처리 순서를 보장해야하는 경우 라고 써두셨는데, 모순되는 것 같아서.. 이게 맞는 걸까요? 제가 아직 파티션에 대한 이해가 부족한건지...