반응형
반응형
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 설치
- 아래 URL에서 kafka를 다운 받는다.
- https://kafka.apache.org/downloads
- 압축만 풀면 되기때문에 별도 설치 과정은 필요없다.
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 |