[Kafka 이론] 10. Zookeeper

Zookeeper

주키퍼는 카프카가 오늘날까지 기능을 유지해온 비결이다. 하지만 점점 사라지는 추세이고 앞으로 더 나은 기술로 대체될 예정이다.

Zookeeper와 Kafka의 관계

주키퍼는 소프트웨어이고 카프카 브로커를 관리 및 카프카 브로커들의 리스트를 유지한다.

  • 주키퍼가 카프카에 유용한 이유는 브로커가 다운될 때마다 파티션의 새로운 리더를 선택해서 선출해야 하는 과정이 필요한데 그 과정을 주키퍼가 도와준다.
  • 변경사항이 생기면 주키퍼가 브로커들에게 전달한다.
    • 토픽이 새로 생겼을때
    • 브로커가 다운되었을때
    • 토픽이 삭제되었을때
  • 주키퍼에는 카프카 메타데이터가 많이 들어있다.
2.x ~ 2.8까지는 주키퍼 없이 사용이 가능했다.
하지만 현재 3.x 부터는 주키퍼 없이도 독립적으로 실행할 수 있고 이것을
Kafka Raft 메커니즘이라고 한다.
Kraft 또는 Kafka Raft라고 부르며 상세 내용은
KIP 500이라고 검색해보면 알 수 있다.
  • Kakfa 4.x 버전부터는 주키퍼가 없고, 주키퍼 없이 Kafka가 올바르게 작동되도록 하는 방향으로 전환되고 있다.
  • 아직까지 주키퍼를 사용하고 있고, 과거 버전을 사용하는 프로젝트도 많으니 프로젝트에 사용하는 카프카 버전이 올라가고 사라지기 전까지는 알아야한다.

주키퍼의 설계

  • 주키퍼는 홀수 개수의 서버와 함께 작동하도록 설계되어 있다.
    • 1, 3, 5, 7개를 갖게 되고 일반적으로는 7개를 넘지 않는다.
  • 주키퍼에도 리더 개념이 있고, 나머지는 팔로워가 된다.
    • 1개는 쓰기, 나머지는 읽기에 사용된다.
  • 아주오래된 정보로 0.10 버전 이전에 사용되던 기능
    • 예전에는 카프카 컨슈머를 이용해서 컨슈머 오프셋을 주키퍼에 저장했다. 하지만 현재 버전은 컨슈머 오프셋을 컨슈머 오프셋이라는 이름의 내부 카프카 토픽에 저장한다. 결과적으로 주키퍼는 컨슈머 데이터를 전혀 갖지 않게 됐다.

주키퍼 클러스터

스크린샷 2023-08-26 오후 2.41.32.png

주키퍼의 리더를 중심으로 나머지 주키퍼가 팔로워를 하고 브로커들이 주키퍼에 연결되어 있다. 그렇게 해서 메타데이터를 받는 구조다.

주키퍼는 언제 사용해야할까?

** 최신 버전의 강의를 공부한다면 주키퍼는 더는 사용하지 말아야 한다. 결과적으로 주키퍼가 필요한 구환경이 아닐경우에는 안쓰는게 카프카 개발자의 의도다. 최신 카프카 개발자가 되려 한다면 절대로 카프카 클라이언트 구성으로서 주키퍼를 사용하지 말자. 기억하자 프로그래밍을 한다면 주키퍼가 아닌 카프카에만 연결하자 꼭!

  • Kafka로 브로커를 관리할때
    • 4.0이 나와서 준비될 때까지는 프로덕션에서 주키퍼 없이 Kafka를 사용할 수 없다.
  • 카프카 클라이언트는 어떨까?
    • 카프카 클라이언트는 시간이 흐르면서 주키퍼를 대신하는 유일한 연결 엔드포인트로서 브로커를 활용하도록 이전해 왔다
    • 사용 이전에는 흔히 프로듀서를 주키퍼에 연결했고 컨슈머도 주키퍼에 연결했다.
    • 모든 카프카 클라이언트와 CLI 툴등은 오로지 카프카 브로커를 연결 엔드포인드로 활용하도록 이전되었다.
    • 컨슈머도 주키퍼에 연결하면 안된다.
    • Kafka 2.0, 2.2 부터는 kafka-topics.sh 명령도 역시 주키퍼가 아닌 브로커를 참조해야 한다. 모든 명령어를 주키퍼에서 카프카로 이전하기 위해 노력해 왔기 때문이다.
    • 주키퍼 없는 카프카를 갖게 되면 클라이언트에 문제가 없게 되기 때문.
  • 주키퍼는 카프카에 비해 안전하지 않다. 만일 사용한다면 카프카 클라이언트가 아닌 오직 카프카 브로커로부터의 연결만 수락해서 주키퍼를 보호해야한다.
LIST