메세지 큐에 관심이 생겨 알아보다가 직접 사용해보고 싶어졌다. 그 중에서 대규모 시스템에서 많이 사용한다고 알려진 apache kafka에 더 관심이 가서 우선 kafka를 공부해보기로 했다. 생각보다 개념이 복잡하고 어려워서 복습할 겸 블로그에 정리해보려고 한다.
brew를 사용하는 경우 아래 명령어로 kafka를 설치한다.
brew install kafka
설치를 끝내고 kafka가 설치된 디렉토리의 bin 폴더로 가보면 아래와 같이 여러 개의 sh 파일들이 설치되어 있는 것을 확인할 수 있다.
kafka를 실행하는 방법에는 zookeeper와 함께 실행하는 방법과 zookeeper 없이 실행하는 방법이 존재한다.
zookeeper-server-start.sh (본인 pc의 카프카 config 경로)/zookeeper.properties 명령어로 zookeeper를 실행한다.
zookeeper-server-start.sh (본인 pc의 카프카 config 경로)/zookeeper.properties
-- 명령어 예시
zookeeper-server-start.sh /opt/homebrew/Cellar/kafka/3.7.0/libexec/config/zookeeper.properties
만약에 zookeeper-server-start.sh 로 실행이 되지 않는다면 환경변수 설정을 하거나 카프카 bin 폴더 안에서 ./zookeeper-server-start.sh 로 실행하면 작동할 것이다.
kafka-server-start.sh (본인 pc의 카프카 config 경로)/server.properties 명령어로 kafka server를 실행한다.
kafka-server-start.sh (본인 pc의 카프카 config 경로)/server.properties
-- 명령어 예시
kafka-server-start.sh /opt/homebrew/Cellar/kafka/3.7.0/libexec/config/server.properties
kafka-storage.sh random-uuid -- 생성된 uuid가 출력된다. ex) 8OrZqVa1Sp2G_OAujOnKAA
2) 카프카가 데이터를 저장하는 경로를 format
아래 명령어로 kraft-combined-logs(카프카가 로그 데이터를 저장하는 경로)를 format하여 초기화한다. 참고로 지정된 UUID는 클러스터 ID로 설정된다.
kafka-storage.sh format -t <위에서 생성한 uuid> -c /opt/homebrew/Cellar/kafka/3.7.0/libexec/config/Kraft/server.properties
-- kafka-storage.sh format -t 8OrZqVa1Sp2G_OAujOnKAA -c /opt/homebrew/Cellar/kafka/3.7.0/libexec/config/Kraft/server.properties
3) 카프카 서버 실행
kafka-server-start.sh (본인 pc의 카프카 config 경로)/server.properties 명령어로 kafka server를 실행한다.
kafka-server-start.sh (본인 pc의 카프카 config 경로)/server.properties
-- 데몬으로 실행할 경우
kafka-server-start.sh -daemon (본인 pc의 카프카 config 경로)/server.properties
참고로 앞으로 카프카는 주키퍼를 제거하는 방향으로 나아갈 것이므로 주키퍼 없이 사용하는 것을 권장한다고 한다.
kafka-topics.sh --bootstrap-server localhost:9092 --topic 생성할 토픽명 --create 명령어로 토픽을 생성한다.
아래는 first_topic이라는 이름의 토픽을 생성한 결과이다. localhost:9092 부분은 부트스트랩 서버의 port를 변경했거나 다른 브로커를 부트스트랩 서버로 설정하고 싶으면 그에 맞게 변경해주면 된다.
kafka-topics.sh --bootstrap-server localhost:9092 --list
명령어로 토픽을 조회할 수 있다.
kafka-topics.sh --bootstrap-server localhost:9092 --topic first_topic --describe : 지정한 토픽에 대한 세부 정보(파티션, 복제본, ISR) 등의 정보 표시
kafka-topics.sh --bootstrap-server localhost:9092 --topic first_topic --delete : 토픽 삭제
kafka-topics.sh --bootstrap-server localhost:9092 --topic first_topic --create --partitions 3 : 생성할 토픽에 3개의 파티션을 생성
kafka-topics.sh --bootstrap-server localhost:9092 --topic first_topic --create --partitions 3 --replication-factor 2 : 각 파티션에 2개의 레플리카 생성