Skip to main content

3. 카프카 기본 개념 설명

3.1 카프카 브로커, 클러스터, 주키퍼#

  • 카프카 브로커는 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션입니다.

데이터 저장, 전송#

  • 프로듀서로부터 데이터를 전달받으면 카프카 브로커는 프로듀서가 요청한 토픽의 파티션에 데이터를 저장하고 컨슈머가 데이터를 요청하면 파티션에 저장된 데이터를 전달합니다.
  • 카프카는 메모리나 데이터베이스에 저장하지 않으며 따로 캐시메모리를 구현하여 사용하지도 않습니다.

데이터 복제, 싱크#

  • 데이터 복제(replication)은 카프카를 장애 허용 시스템(fault tolerant system)으로 동작하도록 하는 원동력입니다.
  • 카프카의 데이터 복제는 파티션 단위로 이루어집니다.
  • 프로듀서 또는 컨슈머와 직접 통신하는 파티션을 리더, 나머지 복제 데이터를 가지고 있는 파티션을 팔로워라고 부릅니다.

컨트롤러(controller)#

  • 클라스터의 다수 브로커 중 한 대가 컨트롤러의 역할을 합니다.
  • 컨트롤러는 다른 브로커들의 상태를 체크하고 브로커가 클러스터에서 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 분배합니다.

데이터 삭제#

  • 카프카는 다른 메시징 플랫폼과 다르게 컨슈머가 데이터를 가져가더라도 토픽의 데이터는 삭제되지 않습니다.
  • 또한 컨슈머나 프로듀서가 데이터 삭제를 요청할 수도 없습니다.
  • 오직 브로커만 데이터를 삭제할 수 있으며, 데이터 삭제는 파일 단위로 이루어 지는데 이 단위를 '로그 세그먼트'라고 부릅니다.

컨슈머 오프셋 저장#

  • 컨슈머 그룹은 토픽이 특정 파티션으로부터 데이터를 가져가서 처리하고 이 파티션의 어느 레코드까지 가져갔는지 확인하기 위해 오프셋을 커밋합니다.

코디네이터(coordinator)#

  • 클러스터의 다수 브로커 중 한 대는 코디네이터의 역할을 수행합니다.
  • 코디네이터는 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배하는 역할을 합니다.

위에서는 카프카 클러스터를 운영할 때 브로커의 역할입니다. 운영시점에 주키퍼가 하는 역할은 카프카의 메타데이터를 관리하는 데 사용됩니다.

3.2 토픽과 파티션#

  • 토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위입니다.
  • 토픽은 1개 이상의 파티션을 소유하고 있습니다.
  • 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 '레코드(record)'라고 부릅니다.
  • 파티션은 카프카의 병렬처리의 핵심으로써 그룹으로 묶인 컨슈머들이 레코드를 병렬로 매칭할 수 있도록 매칭됩니다.
    • 컨슈머 개수를 늘림과 동시에 파티션 개수도 늘리면 처리량이 증가하는 효과를 볼 수 있습니다.

토픽 이름 제약 조건#

  • 공식 문서 검색

의미 있는 토픽 이름 작명 방법#

  • 토픽 이름은 데이터의 얼굴입니다.
  • (예시 1) <환경>.<팀-명>.<애플리케이션-명>.<메시지-타입>
    • prd.marketing-team.sms-platform.json
  • (예시 2) <프로젝트-명>.<서비스-명>.<환경>.<이벤트-명>
    • commerce.payment.prd.notification
  • (예시 3) <환경>.<서비스-명>.<Jira-번호>.<메시지-타입>
    • dev.email-sender.jira-1234.email-vo-custom
  • (예시 4) <카프카-클러스터-명>.<환경>.<서비스-명>.<메시지-타입>
    • aws-kafka.live.marketing-platform.json

3.3 레코드#

3.4 카프카 클라이언트#

3.5 카프카 스트림즈#

3.6 카프카 커넥트#

3.7 카프카 미리메이커2#

3.8 정리#

Last updated on