티스토리 뷰

카프카 관리를 위한 주키퍼

 

분산 시스템을 설계 하다보면, 가장 문제점 중의 하나가 분산된 시스템간의 정보를 어떻게 공유할것이고, 클러스터에 있는 서버들의 상태를 체크할 필요가 있으며 또한, 분산된 서버들간에 동기화를 위한 락(lock)을 처리하는 것들이 문제로 부딪힌다.

 

이러한 문제를 해결하는 시스템을 코디네이션 서비스 시스템 (coordination service)라고 하는데, Apache Zookeeper가 대표적이다. 이 코디네이션 서비스는 분산 시스템 내에서 중요한 상태 정보나 설정 정보등을 유지하기 때문에, 코디네이션 서비스의 장애는 전체 시스템의 장애를 유발하기 때문에, 이중화등을 통하여 고가용성을 제공해야 한다. ZooKeeper는 이러한 특성을 잘 제공하고 있는데, 그런 이유로 이미 유명한 분산 솔루션에 많이 사용되고 있다. NoSQL의 한종류인 Apache HBase, 대용량 분산 큐 시스템인 Kafka등이 그 대표적인 사례이다.

분산 시스템을 코디네이션 하는 용도로 디자인이 되었기 때문에, 데이타 억세스가 빨라야 하며, 자체적으로 장애에 대한 대응성을 가져야 한다. 그래서 Zookeeper는 자체적으로 클러스터링을 제공하며, 장애에도 데이타 유실 없이 fail over/fail back이 가능하다.

 

Apache Zookeeper의 기능은 사실상 별로 없다. 디렉토리 구조기반으로 znode라는 데이타 저장 객체를 제공하고, (key-value식). 이 객체에 데이타를 넣고 빼는 기능만을 제공한다. 일단 디렉토리 형식을 사용하기 때문에 데이타를 계층화된 구조로 저장하기 용이하다.


 

데이타 모델

 

데이타 모델은 간단하다. 디렉토리 구조의 각 노드에 데이타를 저장할 수 있다.

 

 

 

노드는 아래와 같이 기능에 따라 몇가지 종류로 나뉘어 지는데 

 

  • Persistent Node : 노드에 데이타를 저장하면 일부러 삭제하지 않는 이상 삭제되지 않고 영구히 저장된다.

  • Ephemeral Node : 노드를 생성한 클라이언트의 세션이 연결되어 있을 경우만 유효하다. 즉 클라이언트 연결이 끊어지는 순간 삭제 된다. 이를 통해서 클라이언트가 연결이 되어 있는지 아닌지를 판단하는데 사용할 수 있다. (클러스터를 구성할때 클러스터내에 서버가 들어오면, 이 Ephemeral Node로 등록하면 된다.)

  • Sequence Node : 노드를 생성할때 자동으로 sequence 번호가 붙는 노드이다. 주로 분산락을 구현하는데 이용된다.


카프카 및 주키퍼 시작

#주키퍼 데몬 시작 > bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

#카프카 데몬 시작 > bin/kafka-server-start.sh -daemon config/server.properties

 


카프카 상태 확인

 

  • TCP 포트 확인
    • netstat -tlnp | grep 2181, netstat -tlnp | grep 9092 를 통하여 카프카,주키퍼의 포트가 listen 상태인지 확인
  • 주키퍼 지노드를 이용하여 카프카 정보 확인
    • ./zkCli.sh 접속 => ls /brokers/ids, ls /brokers/topics 를 통하여 토픽, 브로커 목록 확인
  • 카프카 서버 로그 확인

 

'OpenSource > Kafka' 카테고리의 다른 글

5장 카프카 컨슈머  (0) 2019.12.16
4장 카프카 프로듀서  (0) 2019.12.16
3장 카프카 디자인  (0) 2019.12.09
1. 카프카란 무엇인가  (0) 2019.12.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함