카프카 조금 아는 척 하기

브로커가 각각의 서버라고 생각하면 된다.

이 카프카 클러스터를 관리 하는 것이 주키퍼 클러스터

topic : 주문용 토픽, 알림용 토픽

메시지를 전송할 때 토픽 뿐 만 아니라 키도 지정할 수 있는데 그 키의 해시값을 이용해서 같은 토픽 및 파티션에 저장되게 될 것이다. 하나의 파티션에서는 순서 보장이 되기 때문에 순서를 유지할 수 있다.

## 파티션과 컨슈머 그룹의 관계

  • 파티션: 메시지를 순서대로 저장하는 원본 데이터 저장소입니다. 순서의 원천입니다.

  • 컨슈머 그룹: 토픽을 구독하는 논리적인 단위입니다. 각 그룹은 파티션별로 "여기까지 읽었음"을 표시하는 **오프셋(Offset)**을 별도로 관리합니다.

따라서 하나의 파티션에 여러 컨슈머 그룹이 연결되면 다음과 같이 동작합니다.

  1. 파티션 0에는 M1, M2, M3, M4... 순서로 메시지가 저장됩니다.

  2. 컨슈머 그룹 A는 파티션 0의 메시지를 M1, M2 순으로 읽고, 자신의 오프셋을 2로 기록합니다.

  3. 컨슈머 그룹 B는 파티션 0의 메시지를 M1, M2, M3, M4 순으로 읽고, 자신의 오프셋을 4로 기록합니다.

두 컨슈머 그룹이 서로 다른 속도로 메시지를 처리하더라도, 각 그룹은 독립적으로 파티션의 메시지를 순서대로 읽어갑니다. A 그룹의 처리 속도가 B 그룹에 영향을 주지 않으며, 파티션의 순서 보장 원칙은 깨지지 않습니다.

성능

  • 파티션 파일은 OS 페이지캐시 사용

    • 파티션에 대한 파일 IO를 메모리에서 처리

    • 서버에서 페이지캐시를 카프카만 사용해야 성능에 유리

  • Zero Copy

    • 디스크 버퍼에서 네트워크 버퍼로 직접 데이터 복사

  • 컨슈머 추적을 위해 브로커가 하는 일이 비교적 단순

    • 메시지 필터, 메시지 재전송과 같은 일은 브로커가 하지 않음

      • 프로듀서, 컨슈머가 직접 해야 함

    • 브로커는 컨슈머와 파티션 간 매핑 관리

수평 확장이 굉장히 용이하다.

Last updated