반응형

1. 서론

이번 포스팅에서는 카프카 운영에 도움이 되는 Tool인 

카프카 매니저와 스키마 레지스트리에 대해 소개하려고 합니다.

 

2. 카프카 매니저

 

2-1. 소개

 

카프카 매니저는 야후에서 오픈소스로 제공하는 카프카 관리 GUI 툴입니다.

 

아마 이전 포스팅을 보셨다면, 터미널이 아닌 사진을 보셨을 텐데요.

그 사진이 제 카프카 매니저에서 발췌한 사진입니다.ㅎㅎ

 

카프카 매니저는 아래와 같은 기능을 제공합니다.

 

  • 다수의 카프카 클러스터 상태 확인
  • 클러스터의 브로커 상태 확인
  • 토픽 리스트 조회
  • 토픽 생성, 삭제
  • 토픽 설정 변경
  • 컨슈머 그룹 offset & lag 확인
  • 토픽 상태 확인( isr, leader 등)
  • 파티션의 leader & follower 변경 ( = partition reassign )

 

2-2. 설치

 

1) 파일 다운로드 

 

파일은 아래 주소에서 원하는 버전을 선택하여 다운받을 수 있습니다.

 

저는 현재 최신 버전인 3.0.0.1 release를 다운받도록 하겠습니다.

  • 저는 홈디렉터리에서 다운받아 진행하도록 하겠습니다.
wget https://github.com/yahoo/CMAK/archive/3.0.0.1.tar.gz
tar -zxvf 3.0.0.1.tar.gz
cd CMAK-3.0.0.1

 

위 명령어를 수행하면 ~/CMAK-3.0.0.1 폴더가 생긴것을 확인할수 있습니다.

 

2) sbt 빌드

 

카프카 매니저는 스칼라 언어로 되어있어 빌드 툴인 sbt를 이용하여 빌드를 진행합니다.

sbt는 소스에 들어가있어 별도 설치는 하지않으셔도 됩니다.

 

아래와 같이 sbt 명령어를 수행합니다.

 

  • CMAK 3.0.0.1 버전에서 제공되는 sbt는 1.3.8 버전입니다.
  • dist 명령어는 컴파일 및 빌드하여 어플리케이션이 실행될수 있도록 zip 파일로 제공해주는 명령어입니다.
  • zip 파일은 target/universal 폴더에 만들어집니다.
./sbt clean dist

 

시간이 상당히 걸려 잠시 커피한잔 마시고 오시는것을 추천드립니다.ㅎㅎ

 

 

수행이 모두 끝나면 ~/CMAK-3.0.0.1/target/universal/cmak-3.0.0.1 zip 파일이 생성된것을 확인할 수 있습니다.

 

 

 

 

 

 

반응형

 

 

 

 

 

 

3) 압축 해제 & 설정 파일 수정

 

이제 ~/CMAK-3.0.0.1/target/universal/cmak-3.0.0.1 zip 파일을 압축 해제합니다. 명령어는 아래와 같습니다.

 

unzip ~/CMAK-3.0.0.1/target/universal/CMAK-3.0.0.1.zip

 

해제가 완료되었으면 cmak-3.0.0.1 폴더가 생성된것을 확인할 수 있습니다.

 

이젠 설정 파일을 수정할 차례입니다.

 

설정파일 경로는 ~/CMAK-3.0.0.1/target/universal/cmak-3.0.0.1/conf/application.conf 입니다.

 

수정 내용은 아래 cmak.zkhosts 의 값을 zookeeper 주소를 적어 주시면 됩니다.

  • 주소 기입 양식 = "<zookeeper node1 hostname>:<zookeeper node1 client port>,<zookeeper node2 hostname>:<zookeeper node2 client port>"

 

 

 

4) 실행

 

실행은 ~/CMAK-3.0.0.1/target/universal/cmak-3.0.0.1/bin/cmak 명령어를 실행하여 주시면 됩니다.

 

5) 확인

 

실행한 서버의 9000 포트로 브라우저 접속을 하시면 아래와 같은 결과를 볼 수 있습니다.

 

3. 스키마 레지스트리

 

3-1. 소개

 

카프카는 메시지의 스키마를 관리하지는 않습니다. 단순히, 메시지를 저장하고 제공하는 역할을 할 뿐입니다.

 

결국, 항상 producer와 consumer는 메시지의 스키마 약속을 해야했고,

한쪽이 약속을 어긴다면 정상처리를 못하는 상황이 일어나게 됩니다.

 

스키마 레지스트리는 이와 같은 문제점을 해결하기 위하여

각 토픽에 들어갈 메시지의 스키마를 중앙관리하는 서비스입니다.

 

스키마 레지스트리의 특징은 아래와 같습니다.

 

  • Avro를 사용하여 스키마를 정의합니다.
  • restApi로 스키마 조회/생성/삭제 기능을 제공합니다.
  • 각 스키마는 버저닝이 가능합니다.

 

 

3-2. 설치

 

저의 경우 카프카 설치 에서 소개한 confulent를 이용하여 설치하도록 하겠습니다.

 

카프카 설치 포스팅에서 말씀드린 ~/apps/confluent-5.4.0 에 다운받았다는 가정하에 진행하겠습니다.

(카프카 설치 를 안보신 분은 보고 오시는 것을 추천드립니다.)

 

1) 설정 파일 수정

 

스키마 레지스트리 설정 파일을 수정합니다.

 

  • 경로 = ~/apps/confluent-5.4.0/etc/schema-registry/schema-registry.properties
  • listeners , host.name , kafkastore.bootstrap.servers 설정을 수정합니다.
    • 아래 listeners 설정 = 모든 ip에서 8081 port에 대한 접근을 허용.
    • 아래 host.name 설정 = 현재 서버의 ip 주소.
    • 아래 kafkastore.bootstrap.servers 설정 = 카프카 브로커 주소.
listeners=http://0.0.0.0:8081
host.name=host-ip
kafkastore.bootstrap.servers=PLAINTEXT://broker-1:9092,SSL://broker-2:9092

 

2) 실행

 

스키마 레지스트리 실행은 아래와 같습니다.

 

  • bin 디렉토리에 있는 schema-registry-start 명령어를 수행합니다.
  • 명령어 수행 시 인자로는 위에서 정의한 schema-registry.properties 파일 경로를 제공합니다.
~/apps/confluent-5.4.0/bin/schema-registry-start ~/apps/confluent-5.4.0/etc/schema-registry/schema-registry.properties

 

3) 확인

 

실행한 서버의 8081 port로 request 시 {} response가 오면 정상 실행된것입니다.

 

 

 

4. schema-registry-ui

 

schema-registry-ui는 스키마 레지스트리의 restApi 기능을 GUI로 제공해주는 서비스입니다.

설치는 https://github.com/lensesio/schema-registry-ui 를 참고하시면 됩니다.

 

  • docker image 로도 제공.
  • 스키마 리스트 확인.
  • 스키마 생성, 수정, 삭제.

아래는 schema-registry-ui 의 화면입니다.

 

 

 

5. 마무리

 

이번 포스팅에서는 카프카 운영에 도움이 되는 카프카 매니저 & 스키마 레지스트리 소개를 진행하였습니다.

다음 포스팅은 카프카 사용 시 고려사항들에 대해 포스팅하도록 하겠습니다.

 

반응형

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

(6) spring kafka + schema registry + gradle plugin 적용  (4) 2020.10.22
(5) 카프카 사용 시 고려사항  (0) 2020.02.26
(3) 카프카 사용 예제  (0) 2020.02.25
(2) 카프카 설치  (0) 2020.02.25
(1) 카프카란?  (2) 2020.02.25
반응형

1. 서론

이번 포스팅에서는 CLI를 통해 간단한 사용 예제를 포스팅하려고 합니다.

 

예제로는 아래와 같습니다.

 

  1. 토픽 생성
  2. 토픽 리스트 조회
  3. 토픽 상세 조회
  4. message pub
  5. message sub
  6. 컨슈머 그룹의 offset/lag 정보 확인

2. 사용 예제

 

2-1 토픽 생성

 

  • 명령어 경로 = 카프카 설치 에서 진행한 ~/apps/confluent-5.4.0/bin 디렉토리에 있습니다.
  • 아래는 replication이 2이고, partition 갯수는 3개인 test_topic을 생성하는 명령어 입니다.
  • --bootstrap-server 에는 각 브로커 서버의 hostname과 port를 ',' 구분자로 적어주시면 됩니다.
    • 저의 경우 브로커 3대를 기입하였습니다.
    • 브로커의 default port는 9092 입니다.

 

kafka-topics --create --bootstrap-server broker-1:9092,broker-2:9092,broker-3:9092 --replication-factor 2 --partitions 3 --topic test_topic

 

2-2 토픽 조회

 

토픽을 생성하였으니 잘 생성되었는지 확인이 필요합니다.

이런 경우, 아래와 같이 토픽 리스트 조회 명령어를 수행하면 됩니다.

kafka-topics --list --bootstrap-server --bootstrap-server broker-1:9092,broker-2:9092,broker-3:9092

 

아래와 같이 test_topic을 확인할 수 있습니다.

 

 

2-3. 토픽 상세 조회

 

토픽 조회에서는 단순히 카프카에 있는 토픽명만을 리스트로 보여주게 됩니다.

토픽의 상세 내용을 조회하고 싶은 경우는 아래 명령어를 통해 확인할 수 있습니다.

kafka-topics --describe --bootstrap-server broker-1:9092,broker-2:9092,broker-3:9092 --topic test_topic

 

결과로는 아래 정보들을 확인할 수 있습니다.

  • partition 갯수
  • replication 수
  • reader broker id
  • isr

 

 

 

반응형

 

 

 

 

 

 

 

2-4. message pub

 

토픽을 생성하였으니, 이번엔 해당 토픽에 메시지를 pub 하겠습니다.

 

명령어는 아래와 같습니다.

kafka-console-producer --broker-list broker-1:9092,broker-2:9092,broker-3:9092 --topic test_topic

 

CLI의 경우 enter 기반으로 메시지를 구분합니다.

저는 아래와 같이 [hi, my name is, young!!] 이라는 3개의 메시지를 pub하였습니다.

 

 

2-5. message sub

 

이번에는 pub한 메시지를 sub을 해보겠습니다.

sub을 하기 위해서는 consumer를 통해 수행됩니다.

 

아래는 sub하는 명령어 입니다.

 

kafka-console-consumer --bootstrap-server broker-1:9092,broker-2:9092,broker-3:9092 --topic test_topic --group test_consumer_group --from-beginning

 

명령어를 보시면 --group을 하는 것을 볼 수 있습니다.

이것은 카프카란? 에서 설명드린것과 같이 consumer는 consumer group이 있어야 하기 때문입니다.

  • 저의 test_consumer_group 이란 consumer group을 가진 consumer를 통하여 sub을 하였습니다.

 

아래는 sub한 결과 사진입니다.

[hi, my name is, young!!] 순서대로 pub했지만 sub은 순서대로되지 않은것을 확인할 수 있습니다.

 

이는 topic의 partition 갯수가 1이 아니기 때문입니다.

  • 카프카에서는 메시지의 pub 순서를 보장하기 위해서는 파티션 갯수가 1이 아닌이상 보장이 되지 않습니다.

 

아래 사진의 latest Offset을 보시면 3개의 메시지들이 3개의 파티션에 각각 들어간것을 볼 수 있습니다.

따라서, consumer는 각 파티션의 메시지를 sub하였고, 위와 같이 순서가 보장되지 않은 결과를 볼 수 있습니다.

 

 

2-6. 컨슈머 그룹의 offset/lag 정보 확인

 

이번엔 특정 컨슈머 그룹의 offset/lag 정보를 확인하는 명령어 입니다.

 

명령어는 아래와 같습니다.

  • --group에 확인하고 싶은 consumer group을 기입합니다.(저의 경우 위에서 sub한 test_consumer_group을 지정하였습니다.)
kafka-consumer-groups --bootstrap-server broker-1:9092,broker-2:9092,broker-3:9092 --group test_consumer_group --describe

 

 

아래는 결과 사진입니다.

  • 위에서 테스트한 test_topic의 결과를 볼 수 있습니다.
  • pub 메시지를 모두 sub하였으니 각 파티션의 lag는 0입니다.

 

 

3. 마무리

이번 포스팅에서는 간단한 CLI 기반의 카프카 사용예제를 진행하였습니다.

다음 포스팅에서는 카프카 사용시 도움되는 Tool들에 대해 소개하도록 하겠습니다.

 

반응형

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

(6) spring kafka + schema registry + gradle plugin 적용  (4) 2020.10.22
(5) 카프카 사용 시 고려사항  (0) 2020.02.26
(4) 카프카 매니저 & 스키마 레지스트리  (0) 2020.02.26
(2) 카프카 설치  (0) 2020.02.25
(1) 카프카란?  (2) 2020.02.25
반응형

1. 서론

이번 포스팅에서는 카프카 설치하는 방법을 튜토리얼처럼 정리하려고 합니다.

중간중간, 용어가 이해가지 않는 분들은 카프카란? 을 보고오시면 좋을거 같습니다.

 

2. 설치

설치는 최근 카프카를 주도적으로 이끌고 있는 confluent를 사용하여 진행하도록 하겠습니다.

 

confluent에서는 설치 방법을 다양하게 제공합니다. 그 중 저는 tar를 이용하여 진행하도록 하겠습니다.

그리고, ~/apps 경로에서 작업하겠습니다.

 

1) confluent-community tar 파일 다운로드

 

  • 카프카, 주키퍼만을 설치할 예정으로 community를 다운받도록 하겠습니다.
  • 현재 기준 최신인 5.4.0 버전을 다운받겠습니다.
curl -O http://packages.confluent.io/archive/5.4/confluent-community-5.4.0-2.12.tar.gz

 

2) 파일 해제

tar -zxvf confluent-community-5.4.0-2.12.tar.gz

 

 

 

 

 

 

반응형

 

 

 

 

 

 

 

3) zookeeper.properties 파일 수정

  • 파일 경로 = ~/apps/confluent-5.4.0/etc/kafka/zookeeper.properties
  • 아래는 confluent에서 가이드 되어있는 부분 중 dataDir, server.* 만 수정한 사진입니다.

  • server.* 에는 앙상블을 이룰 서버의 ip 혹은 hostname을 적습니다.
    • confluent에서는 server.<myid>=<hostname>:<leaderport>:<electionport> 형식으로 가이드 되어있습니다.
  • dataDir에는 zookeeper의 데이터를 담는 경로를 지정합니다.
    • 저의 경우에는 ~/zookeeper 경로를 만들어 지정하였습니다.
    • dataDir 경로에는 server.* 에 지정한 번호값이 myid 파일로 존재해야 합니다.
    • 아래 사진의 경우에는 앙상블 1번 서버의 myid 파일을 cat으로 확인한 사진입니다.

4) server.properties 파일 수정

  • 파일 경로 = ~/apps/confluent-5.4.0/etc/kafka/server.properties
  • broker.id, log.dirs, zookeeper.connect 3개의 값을 변경해줍니다.
    • broker.id는 unique 해야합니다.
    • log.dirs는 카프카관련 로그 경로를 지정해줍니다. (저의 경우 ~에 kafka 디렉토리를 만들어 지정하였습니다.)
    • zookeeper.connect의 경우에는 앙상블 서버들을 ',' 구분자로 이어줍니다. (port는 zookeeper.properties파일에 정의한 clientPort를 지정합니다)
broker.id=1
log.dirs=~/kafka/kafka-logs
zookeeper.connect=zookeeper-server-1:2181,zookeeper-server-2:2181,zookeeper-server-3:2181

 

5) zookeeper 실행

 

주키퍼 실행은 아래와 같습니다.

  • bin 디렉토리에 있는 zookeeper-server-start 명령어를 수행합니다.
  • 명령어 수행 시 인자로는 위에서 정의한 zookeeper.properties 파일 경로를 제공합니다.
~/apps/confluent-5.4.0/bin/zookeeper-server-start ~/apps/confluent-5.4.0/etc/kafka/zookeeper.properties

 

6) broker 실행

 

브로커 실행은 아래와 같습니다.

  • bin 디렉토리에 있는 kafka-server-start 명령어를 수행합니다.
  • 명령어 수행 시 인자로는 위에서 정의한 server.properties 파일 경로를 제공합니다.
~/apps/confluent-5.4.0/bin/kafka-server-start ~/apps/confluent-5.4.0/etc/kafka/server.properties

 

 

3. 마무리

설치는 비교적 간단하게 이루어졌습니다.

다음 포스팅에서는 설치를 하였으니, 간단하게 CLI 기반의 사용예제를 진행하도록 하겠습니다.

 

* 참고

실행 시 에러 로그들이 보일텐데, 이것은 각 노드들이 아직 연결이 안되었기 때문에 나는 로그입니다.

각 노드들을 실행해도 난다면 설정 파일에 잘못된것이 있는지 다시 한번 확인하시기 바랍니다.

반응형

+ Recent posts