본문 바로가기

미들웨어/Kafka

Kafka 설치 및 간단 사용법

반응형

반응형

Kafka는 분산 스트리밍 플랫폼으로 쉽게말해 메시지 큐를 제공하는 솔루션이다.

기본적인 테스트 내용만 정리하였으며 추 후 좀더 공부해서 업데이트 예정이다.


1. Kafka의 필요성

  • Kafka가 왜 필요한지 가장 잘 이해되는 그림인 것 같아 가져왔다.
  • 기존 구조는 end to end 구조의 복잡성과 어려운 확장성을 가지고 있다.

  • Kafka를 통해 복잡성 해소와 간단한 확장성으로 변경되었다.

 

2. Kafka의 구성요소

  • Producer : Kafka에 메시지를 전달하는 Client
  • Consumer : Kafka에서 메시지를 가져가는 Client
  • Topic : 메시지를 구분해 저장하는 공간
  • Broker : Kafka 서버라고 생각하면 쉬움
  • Partition : topic을 여럿으로 나누어 놓은 구조
  • Zookeeper : metadata를 관리하고 broker의 상태를 점검

 

3. Kafka 설치

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

  • 압축만 풀면 되기때문에 별도 설치 과정은 필요없다.

 

4. 기본 테스트

  • 이번 포스팅에서는 특별한 설정 없이 메시지를 주고받는 과정만 진행해 보겠다.
  • zookeeper 기동
[webwas@ip-172-31-39-9 ~]$ zookeeper-server-start.sh /webwas/kafka/config/zookeeper.properties
...
[2023-03-16 08:23:00,025] INFO  (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO   ______                  _                                           (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO  |___  /                 | |                                          (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO     / /    ___     ___   | | __   ___    ___   _ __     ___   _ __    (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO    / /    / _ \   / _ \  | |/ /  / _ \  / _ \ | '_ \   / _ \ | '__| (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO   / /__  | (_) | | (_) | |   <  |  __/ |  __/ | |_) | |  __/ | |     (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO  /_____|  \___/   \___/  |_|\_\  \___|  \___| | .__/   \___| |_| (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,026] INFO                                               | |                      (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,027] INFO                                               |_|                      (org.apache.zookeeper.server.ZooKeeperServer)
[2023-03-16 08:23:00,027] INFO  (org.apache.zookeeper.server.ZooKeeperServer)
...
  • zookeeper-server-start.sh <config파일> <옵션> 과 같은 형태로 실행한다. 옵션으로 -daemon을 주면 background 로 실행 된다.
  • kafka 기동
[webwas@ip-172-31-39-9 ~]$ kafka-server-start.sh /webwas/kafka/config/server.properties 
....
[2023-03-16 08:25:33,933] INFO KafkaConfig values: 
        advertised.listeners = PLAINTEXT://localhost:9092
        alter.config.policy.class.name = null
        alter.log.dirs.replication.quota.window.num = 11
        alter.log.dirs.replication.quota.window.size.seconds = 1
        authorizer.class.name = 
....
  • zookeeper와 마찬가지로 kafka-server-start.sh <config파일> <옵션> 형태로 실행하며 -daemon도 동일하게 동작한다.
  • 메시지를 저장할 topic 생성하기
[webwas@ip-172-31-39-9 ~]$ kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test-kafka
Created topic test-kafka.
[webwas@ip-172-31-39-9 ~]$ kafka-topics.sh --list --bootstrap-server localhost:9092
__consumer_offsets
test-kafka
  • kafka-topics.sh을 이용해 create 및 list조회등의 명령어를 수행한다. 예시에서는 test-kafka라는 topic을 생성했다.
  • test-kafka topic에 메시지 저장하기
[webwas@ip-172-31-39-9 ~]$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-kafka
>hello
>kafka test
>bye
  • kafka-console-producer.sh을 통해 test-kafka topic에 메시지를 저장했다.
  • > 이후에 저장할 메시지를 입력하면 된다.
  • 완료 후에는 Ctrl + C를 통해 나가면 된다(bash의 경우 별도 close명령어는 없는 것 같다.)
  • test-kafka topic에서 메시지 수신하기
[webwas@ip-172-31-39-9 ~]$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-kafka --from-beginning
hello
kafka test
bye
  • kafka-console-consumer.sh을 통해 메시지를 수신할 수 있다. 
  • from-beginning : 첫 메시지부터 모두 읽어오기
  • 그 외에 offset을 지정해 원하는 위치부터 읽어 올 수 있으며 consumer가 실행되어 있는 동안 producer로 메시지를 저장하면 실시간으로 데이터를 읽어온다.

 


개인적으로 프로젝트를 수행하기 위해 kafka를 공부할 예정이다.

다음 포스팅에는 kafka-cluster를 구성해보고 failover등의 테스트를 진행하겠다.

반응형

'미들웨어 > Kafka' 카테고리의 다른 글

Kafka partition에 message저장 방식  (0) 2023.03.18
Kafka cluster 구성 및 failover 테스트  (0) 2023.03.17