본문으로 바로가기

[Kafka] Linux Kafka 설치 (Apache Kafka 3.0.0)

category Backend/Kafka 2022. 1. 8. 13:56

1. 카프카란?

  • LinkedIn이 개발한 시스템
  • Apache Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다.
  • 분산형 게시-구독 메시징 플랫폼
  • 서버 클러스터 내에서 데이터 스트림을 레코드로 유지하는 방식으로 작동하는 브로커 기반 솔루션
  • 서로 다른 구성 요소 간의 안정적인 데이터 교환
  • 데이터 처리를 위한 실시간 스트리밍
  • 필요한 모든 곳에서 대규모 데이터를 동시에 이동할 수 있습니다.

2. 카프카를 왜 쓰나요?

[카프카 사용 이전]

end-to-end

end-to-end 연결 방식의 아키텍처의 문제로는 시스템이 작을 때는 문제가 없을 수 있으나

커질수록 연동이 복잡해지고 결합도가 매우 크다 보니까 시스템을 확장하고 싶을 경우 엄청난 노력이 필요하게 됩니다.

 

[카프카 사용 이후]

Kafka

  • 소스 애플리케이션과 타겟 애플리케이션의 결합도 [coupling]가 낮아집니다.
  • 연동 작업이 간단해져 시스템 확장이 쉽습니다.
  • 장비 추가나 작업을 서비스를 중단하지 않으면서 가능합니다. (스케일 아웃)
  • Consumer를 여러 개(Consumer Group)를 사용할 수 있어서 병렬 처리가 가능합니다.
  • Replication을 사용해 고가용성이 가능합니다. (고장 나지 않는 시스템)
  • 낮은 지연(latency) 높은 처리량(throughput)을 지원함에 따라 데이터를 효과적으로 아주 많이 처리할 수 있습니다. 

3. 카프카 용어 정리

Broker: 카프카 애플리케이션 서버 단위(보통 3개 이상의 broker로 구성(클러스터링)하여 사용하는 것을 권장)
Topic: 데이터 분리 단위, 다수 파티션 보유 (like table)
Partition: 레코드를 담고 있음, 컨슈머 요청 시 레코드 전달
Offset: 각 레코드당 파티션에 할당된 고유 번호
Producer: 레코드를 브로커로 전송하는 애플리케이션
Consumer: 레코드를 polling 하는 애플리케이션
Consumer group: 다수 컨슈머 묶음
Consumer offset: 특정 컨슈머가 가져간 레코드의 번호
Replication: 파티션 복제 기능
ISR: 리더+팔로워 파티션의 sync가 된 묶음 (replication group이라고 생각하면 됩니다.)

4. 카프카 설치

1. 아래의 사이트에 접속해서 다운로드 URL을 복사합니다

(또는 다운로드하여 ftp툴을 이용해 직접 서버에 업로드해도 됩니다.)

https://kafka.apache.org/downloads

 

2. wget을 이용하여 다운로드합니다.

경로 같은 경우엔 소스 파일은 /usr/local/src 에 보관하고 /usr/local/ 에 설치하는 것이 관례

# /usr/local/src

# wget --no-check-certificate https://dlcdn.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz

 

3. 압축을 해제합니다.

# tar xvf kafka_2.13-3.0.0.tgz

5. 카프카 환경설정

간단한 테스트를 위한 로컬 설정을 합니다. 

# cd /usr/local/src/kafka_2.13-3.0.0/config

# vi server.properties

[31번 라인 정도에 있는 다음 내용 주석 해제]
listeners=PLAINTEXT://:9092

[36번 라인 정도에 있는 다음 내용 주석 해제 후 다음과 같이 내용 변경]
advertised.listeners=PLAINTEXT://localhost:9092

 

server.properties 주요 설정

broker.id : 정수로 된 브로커 번호. 클러스터 내 고유번호로 지정

listeners : Kafka 통신에 사용되는 host:port

advertised.listeners : Kafka Client가 접속할 host:port

log.dirs : 메시지를 저장할 디렉토리

log.segment.bytes : 메시지가 저장되는 파일의 크기 단위

log.retention.ms : 메시지를 얼마나 보존할지 지정

zookeeper.connect : 브로커의 메타데이터를 저장하는 주키퍼의 위치

auto.create.topics.enable : 자동으로 토픽 생성 여부

num.partitions : 자동 생성된 토픽의 기본 파티션 개수

message.max.bytes : 브로커에 쓰려는 메시지 최대 크기

6. 카프카 테스트

  • 카프카는 일반적으로는 보통 3개 이상의 broker로 구성하여 사용하는 것을 권장합니다.  (다른 서버로 둔 3개의 카프카 broker) 그러나 테스트를 위해 1개의 카프카만 사용합니다.
  • 프로듀서와 컨슈머는 보통 Spring Boot(Java)나 Python, Scala에게 제공되는 라이브러리를 이용하여 구현하지만 간단한 테스트를 위해 console 프로듀서, 컨슈머를 활용합니다.
  • sh 명령어 실행은 절대 경로를 활용하여 실행하였습니다. 상대 경로를 사용해도 됩니다.

 

1. 카프카 실행

카프카를 실행하기 위해서는 먼저 zookeeper를 실행합니다. (브로커의 메타데이터를 저장 용도로 사용합니다.)

[1. zookeeper 데몬으로 실행]
# /usr/local/src/kafka_2.13-3.0.0/bin/zookeeper-server-start.sh -daemon /usr/local/src/kafka_2.13-3.0.0/config/zookeeper.properties

[2. kafka 데몬으로 실행]
# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-server-start.sh -daemon /usr/local/src/kafka_2.13-3.0.0/config/server.properties

[3. 실행 확인]
# ps -ef | grep zookeeper
# ps -ef | grep kafka

 

 

2. Topic Create

kafka-test라는 topic을 생성해줍니다. 1개의 Partition과 1개의 Replication으로 생성합니다.

생성 후 잘 생성이 되었는지 리스트를 확인합니다.

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic kafka-test

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
__consumer_offsets
kafka-test

 

 

3. Producer 실행

콘솔을 이용해 Producer를 실행합니다.

새로운 Console창을 띄우고 해당 Console을 이용해서 Kafka에게 데이터를 전달할 Producer 실행 sh파일을 실행합니다.

데이터를 입력하면 Kafka에 데이터가 전달됩니다.

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic kafka-test

> hello
> kafka test

 

 

4. Consumer 실행

콘솔을 이용해 Consumer를 실행합니다.

새로운 Console창을 띄우고 Kafka에서 데이터를 Polling 할 Consumer 실행 sh파일을 실행합니다.

실행을 하게 되면 Producer에서 입력하여 Kafka에 저장된 데이터를 Polling 해 옵니다.

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka-test --from-beginning

 

 

5. 실행 결과 

console test

 

6. Topic Delete 

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic kafka-test

# /usr/local/src/kafka_2.13-3.0.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092