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

카프카 브로커/클러스터/주키퍼

데이터를 안전하게 보관하고 처리하기 위해 3대 이상의 브로커 서버를 1개의 클러스터로 묶어서 운영.

데이터 저장, 전송

  • 프로듀서가 요청한 토픽의 파티션에 데이터 저장.(파일 시스템).

  • 컨슈머가 요청하면 파티션에 저장된 데이터 전달.

// EC2
// 파일 시스템에 저장된 데이터
$ ls /tmp/kafka-logs

// hello.kafka topic의 0번 파티션 데이터
$ ls /tmp/kafka-logs/hello.kafka-0
  • 카프카는 데이터를 파일 시스템에 저장한다.

    페이지 캐시(메모리 영역)를 사용하여 디스크 입출력 속도 향상.

    한번 읽은 파일의 내용은 메모리의 페이지 캐시 영역에 저장. 동일한 파일 접근은 메모리에서 읽음.

데이터 복제, 싱크

  • 카프카의 데이터 복제는 파티션 단위.

  • 복제된 파티션은 리더(leader)와 팔로워(Follower)로 구성.

리더 파티션 : 프로듀서 또는 컨슈머와 직접 통신하는 파티션.

팔로워 파티션 : 나머지 복제 데이터를 가지고 있는 파티션.

  • 복제(replica) : 리더 파티션의 오프셋을 확인하여 자신의 오프셋과 차이가 나는 경우 리더 파티션으로 부터 데이터를 가져오는 과정.

  • 리더 파티션이 사용할 수 없는 경우 팔로워 파티션 중 하나가 지위를 넘겨받는다.

컨트롤러(Controller)

  • 클러스터의 다수 브로커 중 한 대가 컨트롤러의 역할을 한다.

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

  • 컨트롤러 역할의 브로커에 장애가 생기는 경우 다른 브로커가 컨트롤러 역할을 한다.

데이터 삭제

  • 컨슈머가 데이터를 가져가도 토픽의 데이터는 삭제되지 않는다.

  • 컨슈머나 프로듀서가 데이터 삭제를 요청 할 수 없다.(브로커만 데이터 삭제 가능)

로그 세그먼트(log segment) : 데이터 삭제의 파일 단위

세그먼트 파일이 닫히는 기본값 : 1GB

닫힌 세그먼트 파일 삭제 관련 옵션 : log.retention.bytes or log.retension.ms

닫힌 세그먼트 파일 체크 간격 옵션 : log.retention.check.interval.ms

컨슈머 오프셋 저장

  • 파티션의 어느 레드까지 가져갔는지 확인하기 위해 오프셋을 커밋.

  • 커밋한 오프셋은 --consumer_offsets 토픽에 저장

코디네이터(Coordinator)

코디네이터 : 컨슈머 그룹의 상태를 체크하고 파티션을 컨슈머와 매칭되도록 분배하는 역할.

리밸런스(rebalance) : 파티션을 컨슈머로 재할당.

  • 클러스터의 다수 브로커 중 한 대는 코디네이터의 역할을 수행

  • 컨슈머가 컨슈머 그룹에서 빠지면 매칭되지 않은 파티션을 정상 동작하는 컨슈머로 할당하여 끊임없이 데이터 처리.

참고

주키퍼

  • 카프카의 메타데이터를 관리하는데 사용

// 로컬 주키퍼 기본 포트 : 2181
$ bim/zookeeper-shell.sh my-kafka:2181

Connecting to my-kafka:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

// root znode의 하위 znode 확인
ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]

// 카프카 브로커에 대한 정보 (보안 규칙, jmx port, host, 등등)
get /brokers/ids/0
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://52.14.108.146:9092"],"jmx_port":-1,"host":"52.14.108.146","timestamp":"1637036405828","port":9092,"version":4}

// 컨트롤러 정보
get /controller
{"version":1,"brokerid":0,"timestamp":"1637036406085"}

// 카프카에 저장된 토픽 정보
ls /brokers/topics
[__consumer_offsets, hello.kafka, hello.kafka.2, verify-test]
  • 카프카 클러스터로 묶인 브로커들은 동일한 경로의 주키퍼 경로로 선언해야

    같은 카프카 브로커 묶음이 된다.

znode : 주키퍼에서 사용되는 저장 단위(znode간 계층 구조로, 트리 구조를 가질 수 있다.)

주키퍼에서 다수의 카프카 클러스터 사용은 서로 다른 znode에 카프카 클러스터들을 설정.

Last updated