본문 바로가기

Kafka

[Kafka] 카프카 튜토리얼_Quick Start

반응형

카프카를 처음 접했을 때 빠르게

시작할 수 있는 튜토리얼 입니다:)

 

 

 

"공식문서를 바탕으로 작성 된 카프카 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

 

Apache Download Mirrors

Copyright © 2019 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.

www.apache.org

 

카프카 압축 파일 다운

$ 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

 

config 파일

 

추가 노드 실행

- 쥬키퍼는 이미 싱글노드와 함께 시작했기 때문에, 새로운 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