Kafka 설치부터 간단한 spring-boot 애플리케이션과 연결하여 동작시키는 과정을 정리한 글입니다. Apache Kafka QuickStart 페이지와 CONFLUNET 예제를 참고하였습니다.
1. Kafka 다운로드
Kafka를 다운로드합니다. 저는 wget 명령어로 다운로드하고 적당한 폴더에 압축을 해제하겠습니다.
$ mkdir apps
$ cd apps
$ wget http://mirror.navercorp.com/apache/kafka/2.6.0/kafka_2.13-2.6.0.tgz
$ tar -xzf kafka_2.13-2.6.0.tgz
$ ln -s kafka_2.13-2.6.0 kafka # 버전 up시 변경을 줄이기위한 심볼릭 링크 생성
$ cd kafka
2. Kafka 동작 환경 설정
로컬 환경에 8 버전 이상의 Java가 설치되어있어야 합니다.
Kafka실행 전 zookeeper가 먼저 동작하고 있어야 합니다. zookeeper, kafka 순으로 서버를 시작시키겠습니다.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
$ bin/kafka-server-start.sh config/server.properties
3. 토픽 생성
Kafka는 이벤트(event)들을 토픽(topic) 단위로 관리합니다. 파일시스템에 비유 시 토픽이 폴더라면, 발생하는 이벤트 들은 폴더 안의 파일로 생각할 수 있습니다. 이제 관리할 이벤트들을 위한 토픽을 하나 등록합니다.
# 'test-events' 토픽을 생성 (kafka broker 기본 port = 9092)
$ bin/kafka-topics.sh --create --topic test-events --bootstrap-server localhost:9092
# test-topic에 대한 파티션 상태 확인
$ bin/kafka-topics.sh --describe --topic test-events --bootstrap-server localhost:9092
Topic:test-events PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
4. 토픽에 이벤트 쓰기
카프카 토픽은 파티션 단위로 브로커(broker)에게 분산됩니다. 브로커는 이름처럼 메시지 중간 역할을 합니다. 발행자로부터 메시지를 전달받고 구독자에게 메시지를 전달합니다. 카프카에서는 발행자를 프로듀서(Producer), 구독자를 컨슈머(Consumer)라 정의합니다.
먼저 Producer를 이용해 토픽에 이벤트를 발행해보겠습니다. 발행한 메시지는 브로커를 통해 관리됩니다.
$ bin/kafka-console-producer.sh --topic test-events --bootstrap-server localhost:9092
> first test-events!
> I am a producer!
Producer기능을 중지하고 싶다면 Ctrl-C 키를 입력해 빠져나와줍니다.
5. 토픽 읽어오기
발행한 이벤트를 읽어오려고 합니다. 이때는 Consumer를 이용하여 읽어옵니다. Producer가 발행했던 순서로 이벤트를 가져와 콘솔에 뿌려지게 됩니다.
$ bin/kafka-console-consumer.sh --topic test-events --from-beginning --bootstrap-server localhost:9092
first test-events!
I am a producer!
Consumer 기능을 중지하고 싶다면 Ctrl-C 키를 입력해 빠져나와줍니다.
6. 카프카 종료하기
- 지금까지 진행했던 것의 역순으로 종료합니다. 먼저 Producer와 Consumer가 종료되지 않았다면 종료시킵시다. 모든 종료는 Ctrl-C를 이용합니다.
- Kafka broker를 종료합니다.
- 마지막으로 ZooKeeper를 종료합니다.
test-events 토픽에 발행했던 메시지는 주키퍼와 카프카가 종료되어도 재 시작 시 남아있게 됩니다. 카프카 종료와 함께 저장된 이벤트들도 함께 제거하고 싶다면 아래의 명령어를 입력하여 제거해줍니다.
$ rm -rf /tmp/kafka-logs /tmp/zookeeper
지금까지 카프카를 설치 및 실행하고 Producer와 Consumer를 이용하여 이벤트를 발행/구독하는 것을 테스트해보았습니다. 이어서 지금 설치한 ZooKeeper와 Kafka broker를 이용해 스프링 부트 환경에서 Producer와 Consumer를 이용한 테스트를 진행해보겠습니다.
감사합니다.