본문 바로가기

💻 개발/Kafka

Mac에서 카프카 설치하고 메시지 발행, 컨슘 해보기

 

카프카 공식 사이트에서 제공하는 Kafka Quickstart 문서(https://kafka.apache.org/quickstart)를 따라하면 로컬 환경에 간편하게 카프카를 설치하여 메시지를 발행하고 소비하는 등 테스트를 해볼 수 있다. 따라서 실습 한 내용을 정리해보았다.

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

사전 준비사항

카프카는 JVM 언어 중 하나인 스칼라(Scala)로 구현되어 있기 때문에 사전에 Java가 설치되어 있어야 한다.

 

카프카 다운로드 및 설치

카프카 설치는 비교적 간단하다. https://kafka.apache.org/downloads 페이지에 접속하여 바이너리 압축 파일을 원하는 위치에 다운받고 압축을 풀어주기만 하면 바로 카프카를 실행할 수 있는 상태가 된다.

카프카 다운로드 페이지에서는 스칼라 버전에 따라 각각 다른 빌드를 제공하는데, 스칼라를 사용하고 있지 않다면 사이트에서 추천하는대로 2.12로 빌드된 압축 파일을 다운받으면 된다. 이 포스트에서는 Kafka_2.12-2.5.0.tgz 파일을 받아서 진행했다.

압축 파일을 다운로드 받고 압축을 풀면 아래와 같은 디렉토리(파일)이 포함되어 있는것을 확인할 수 있다.

 

➜  kafka_2.12-2.5.0 ls
drwxr-xr-x@    - wayne  4 7  0:29 .
drwxr-xr-x     - wayne  4 7  0:22 ..
.rw-r--r--@ 8.2k wayne  4 7 10:04 .DS_Store
drwxr-xr-x@    - wayne  4 7  0:24 bin
drwxr-xr-x@    - wayne  8 4 10:16 config
drwxr-xr-x@    - wayne  8 4 10:16 libs
.rw-r--r--@  32k wayne  8 4 10:13 LICENSE
drwxr-xr-x     - wayne  4 7  0:30 logs
.rw-r--r--@  337 wayne  8 4 10:13 NOTICE
drwxr-xr-x@    - wayne  8 4 10:16 site-docs

이름에서 알 수 있듯이 bin 디렉토리에는 주키퍼와 카프카를 실행시킬수 있는 실행 파일(스크립트)이 들어있으며 config 디렉토리에는 카프카를 실행시키는데 필요한 설정 파일들이 포함되어 있다.


카프카 실행

카프카는 카프카 클러스터의 노드 관리를 위해 주키퍼를 사용한다. 따라서 카프카를 실행하려면 주키퍼를 먼저 실행해야 한다. 다운받은 파일에 주키퍼를 실행하는 스크립트가 포함되어 있으므로 아래 명령어로 주키퍼를 먼저 실행해준다.

 

bin/zookeeper-server-start.sh config/zookeeper.properties

그런데 이렇게 실행하면 포그라운드로 실행이 되기 때문에 같은 터미널에서 다음 작업을 이어서 할 수가 없다. 새 터미널 창을 띄워서 진행해도 되는데 그게 귀찮으면 아래와 같이 데몬으로 실행하는 방법도 있다.

 

bin/zookeeper-server-start.sh -daemon config/zookeeper.properties

데몬으로 실행하면 터미널에 아무것도 나오지 않기 때문에 서버가 잘 실행 된건지 확인이 잘 안된다. 그래서 netstat 명령으로 주키퍼의 기본 포트인 2181로 조회하여 LISTEN 상태인지 확인한다.

 

➜  kafka_2.12-2.5.0 netstat -an | grep 2181
tcp46      0      0  *.2181                 *.*                    LISTEN

이어서 카프카 서버도 데몬으로 실행한다.

 

bin/kafka-server-start.sh -daemon config/server.properties

카프카 토픽 생성

주키퍼와 카프카 서버가 잘  실행 되었다면 다음은 토픽을 생성할 차례다. 파티션이 하나이고 Replication factor가 1인 "test"라는 이름을 갖는 토픽을 아래 명령어로 생성할 수 있다.

 

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

각 옵션에 대한 설명

  • --create : 새로운 토픽을 생성한다.
  • --bootstrap-server : 연결할 카프카 서버를 지정한다. (기존에는 --zookeeper 옵션으로 주키퍼 서버를 지정했으나 현재는 Deprecated 되었다.) 
  • --replication-factor : 생성되는 토픽의 각 파티션의 Replication factor를 지정한다.
  • --partitions : 생성되는 토픽의 파티션 수를 지정한다.
  • --topic : 생성하려는 토픽의 이름을 지정한다.

토픽이 잘 생성 되었는지 확인하려면 아래 명령을 실행한다.

 

bin/kafka-topics.sh --list --bootstrap-server localhost:9092

생성된 토픽의 목록이 화면에 표시된다.


메시지 발행하기

kafka-console-producer.sh 파일을 사용하면 터미널을 이용해서 특정 토픽에 메시지를 발행할 수 있다.

 

bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
Hello kafka
This is test message

--bootstrap-server옵션으로 연결할 카프카 서버를 지정하고 --topic 옵션으로 토픽 이름을 설정하고 kafka-console-producer를 실행하면 메시지를 입력받을 수 있는 상태가 된다. 이 상태에서 메시지를 입력하면 지정한 토픽(test)로 메시지가 발행된다.


메시지 컨슘하기

kafka-console-consumer.sh 파일을 사용하면 토픽에서 메시지를 읽어온 후 화면(standard output)에 메시지를 출력해볼 수 있다.

 

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
Hello kafka
This is test message

기본적으로 kafka-console-consumer를 사용하면 컨슈머가 실행된 이후에 발행된 메시지부터 소비를 시작한다. 그러나 현재 실습에서는 토픽에 이미 발행되어 있는 메시지를 소비해서 출력 해보는것이 목표이기 때문에 --from-beginning 옵션을 주었다. --from-beginning 옵션을 주게 되면 해당 토픽에 존재하는 맨 처음 메시지부터 컨슘을 시작한다. 앞에서 메시지를 발행할 때 "Hello kafka", "This is test message" 2개의 메시지를 발행한 상태이기 때문에 컨슈머가 시작되면 2개의 메시지가 바로 출력되는 것을 확인할 수 있다.


참고자료