카프카를 처음 접했을 때 빠르게
시작할 수 있는 튜토리얼 입니다:)
"공식문서를 바탕으로 작성 된 카프카 Quickstart"
Kafka 다운로드
# Kafka 2.4.0 버전 다운로드 : https://www.apache.org/dyn/closer.cgi?path=/kafka/2.4.0/kafka_2.12-2.4.0.tgz
카프카 압축 파일 다운
$ wget http://mirror.navercorp.com/apache/kafka/2.4.0/kafka_2.12-2.4.0.tgz
- 아래와 같이 다운로드를 완료한다
tar 압축해제
$ tar -xzf kafka_2.12-2.4.0.tgz
$ cd kafka_2.12-2.4.0
- 압축 해제 후 해당 폴더로 접근한다.
서버 실행하기
쥬키퍼란
- 카프카는 Zookeeper를 사용한다.
- 카프카를 사용하기 위해서는 우선 쥬키퍼가 설치되어 있어야 한다.
- 빠르게 싱글노드에서 쥬키퍼 인스턴스를 사용하기위해서는 카프카와 함께 설치 된 쥬키퍼를 사용
쥬키퍼 / 카프카 config 파일 확인
# zookeeper
$ vi config/zookeeper.properties
# kafka
$ vi config/server.properties
- 위 파일에서 쥬키퍼와 카프카 config 파일 확인 및 수정 가능
쥬키퍼 / 카프카 실행 확인
# zookeeper
$ vi bin/zookeeper-server-start.sh
# kafka
$ vi bin/kafka-server-start.sh
- 쥬기퍼/카프카 서버를 실행시키는 쉘 파일
- 실행 시 아래와 같이 실행 파일을 같이 넘겨 줘야한다
쥬키퍼 실행
$ bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
- 데몬으로 실행 시키기 위해서는 -daemon 파라미터 값을 같이 줘야한다 (백엔드 실행)
- 카프카 실행 전 먼저 쥬키퍼가 실행 되어야 한다.
카프카 실행
$ bin/kafka-server-start.sh -daemon config/server.properties
- 데몬으로 실행 시키기 위해서는 -daemon 파라미터 값을 같이 줘야한다 (백엔드 실행)
Topic 생성하기
토픽 생성하기
$ bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
# bin/kafka-topics.sh : 토픽 실행 파일
# --create : 토픽 생성 파라미터
# bootstarap.server : 호스트/포트 지정
# --replication-factor : replica 갯수 지정 (복제본의 수)
# --partitions : paritions 갯수 지정 (토픽을 몇개로 나눌 것인가)
# --topic [이름] : 생성될 토픽의 이름 지정
생성 된 토픽 확인
$ bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# bin/kafka-topics.sh : 토픽 실행 파일
# --list : 토픽 리스트 파라미터
# --bootstrap-server : 호스트/포트 지정
메세지 보내기
메세지 전송
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
# bin/kafka-console-producer.sh : 프로듀서 콘솔 실행파일
# --bootstrap-server : 호스트/포트 지정
# --topic : 메세지를 보낼 토픽 지정
- 위 명령어를 입력하면 입력 콘솔로 변한다.
- 이때 기본적으로 한줄 단위로 분리된 메세지로 보내지게 된다.
컨슈머 실행하기
메세지 읽기
$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
# bin/kafka-console-consumer.sh : 컨슈머 콘솔 실행파일
# --bootstrap-server : 호스트/포트 지정
# --topic : 메세지를 읽을 토픽 지정
# --from-beginning : 메세지를 어디서 부터 읽을 지 지정
멀티 브로커 클러스터 환경 셋팅
- 지금까지는 하나의 브로커에서 실행을 해왔고, 이제는 3개의 클러스터 환경에서 카프카 브로커를 실행한다.
- 현재는 하나의 머신에서 3개의 브로커를 띄울 예정
각 브로커 별 config파일 설정
$ cp config/server.properties config/server-1.properties
$ cp config/server.properties config/server-2.properties
- 기존의 카프카 config 파일인 config/server.properties를 서버 이름만 다르게 복사
각 설정파일 수정
- 설정파일에 들어가서 각각 아래 3가지(broker.id, listeners, log.dirs)를 변경한다.
- 여기서 broker.id는 클러스터 속 각각의 노드의 유일하고 영구적인 property이다.
- 각각의 포트와 로그는 같은 머신에서 돌아갈 수 있도록 변경해준다.
# server-1
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1
# server-2
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/tmp/kafka-logs-2
추가 노드 실행
- 쥬키퍼는 이미 싱글노드와 함께 시작했기 때문에, 새로운 2개의 노드만 추가 실행한다.
$ bin/kafka-server-start.sh config/server-1.properties &
$ bin/kafka-server-start.sh config/server-2.properties &
새로운 토픽 생성
$ bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic
- 위에서 토픽을 생성 할 때 사용한 명령어에서 RF수만 변경
- 현재 3개의 클러스터로 돌아가고 있기 때문에 복제본 수도 3으로 지정
새로운 토픽에 대한 클러스터 체크
$ bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
- 토픽을 생성 할 때와 달리 클러스터 확인에는 --describe 파라미터를 사용한다.
# output
- "leader" : 주어진 파티션에 대해서 모든 읽기와 쓰기를 책임지는 노드이다. 각 노드는 파티션의 특정부분에서 랜덤하게 리더로 선출된다.
- "replicas" : 만약 그 노드들이 현재 살아있거나, 그들이 리더이던 아니던 관계없이 파티션에 대해 로그를 복제하는 노드의 리스트이다.
'Kafka' 카테고리의 다른 글
[Kafka] 도커 컴포즈 + 카프카, 주키퍼 환경 구축 (0) | 2020.06.18 |
---|