- zookeeper 설정을 완료했으니 이제 kafka를 설치해보자.
wget https://archive.apache.org/dist/kafka/3.3.0/kafka_2.12-3.3.0.tgz
tar xvf kafka_2.12-3.3.0.tgz
- kafka 실행 전에 broker.id 설정, zookeeper에 대한 설정과 listener설정을 해야한다. 이때 broker.id를 모두 다르게 설정해야한다. zookeeper.connect 설정시 마지막에 /test 와 같이 route를 넣으면, zookeeper의 root node가 아닌 child node에 카프카정보를 저장하게 되므로 유지보수에 이득이 있다고 한다.
# /home/ec2-user/kafka_2.12-3.3.0/config/server.properties
# kafka-broker01의 경우
broker.id=0
listeners=PLAINTEXT://:9091
advertised.listeners=PLAINTEXT://kafka-broker01:9091
zookeeper.connect=kafka-broker01:2181,kafka-broker02:2181,kafka-broker03/test
# kafka-broker02의 경우
broker.id=1
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka-broker02:9092
zookeeper.connect=kafka-broker01:2181,kafka-broker02:2181,kafka-broker03/test
# kafka-broker03의 경우
broker.id=2
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka-broker03:9092
zookeeper.connect=kafka-broker01:2181,kafka-broker02:2181,kafka-broker03/test
- 이제 kafka를 실행해본다.
# /home/ec2-user/kafka_2.12-3.3.0/bin
./kafka-server-start.sh ../config/server.properties
- 아래와 같은 에러가뜬다. 이는 kafka 패키지의 기본 힙 메모리 설정이 kafka = 1G, zookeeper = 512M으로 설정되어 있기 때문에 프리티어의 메모리 1G에서는 두 개를 동시에 실행시 "Cannot allocate memory"가 발생한다.
- 아래 명령어로 가용메모리를 확인한 후 힙 메모리를 설정하자.
free -h
- kafka의 힙 메모리를 설정한다.
# 최대, 최소 메모리
export KAFKA_HEAP_OPTS="-Xms400m -Xmx400m"
- 만약 zookeeper 힙 메모리도 변경하고 싶을 경우 아래와 같이 설정하면 된다.
# 최대, 최소 메모리
export SERVER_JVMFLAGS="-Xmx216 -Xms216m"
- 위와 같이하면 서버를 실행할 때 마다 위의 명령어를 입력해야 하므로 "/etc/profile"에서 아래와 같이 수정을 한다.
- 적용하기 위해 아래 명령어를 사용한다.
source /etc/profile
- kafka를 실행했는데 아래와 같은 에러가 났다.
- 원인을 찾아보니 /config/server.properties의 "log.dirs"가 가리키는 디렉토리에 meta.properties의 cluster-id가 일치하지 않아서 뜨는 오류이다. 디렉토리를 확인해주고, /tmp/kafka-logs로 가서 파일을 지워주자.
# /tmp/kafka-logs
rm -f meta.properties
- 이제 다시 모든 인스턴스에서 kafka를 실행한다.
# /home/ec2-user/kafka_2.12-3.3.0/bin
./kafka-server-start.sh ../config/server.properties
- 아주 잘 작동한다.
- 이제 토픽 생성 테스트를 해보자. kafka-2.8.0 이상 버전부터는 아래 명령어를 통해 토픽을 생성할 수 있다.
./kafka-topics.sh --create --bootstrap-server kafka-broker01:9092,kafka-broker02:9092,kafka-broker03:9092 --replication-factor 3 --partitions 1 --topic test
- 토픽이 정상적으로 생성되었다.
- 이제 producer와 consumer 생성하여 테스트를 해보자. 참고로 consumer는 기본적으로 소비자는 실행이 시작된 후에 생성된 새 메시지만 읽는다. 하지만 --from-beginning 옵션을 추가하면 처음부터 메시지 읽기를 시작하도록 consumer에게 지시한다. 즉, consumer가 시작되기 전에 생성된 메시지를 포함하여 토픽의 모든 메시지를 재생하거나 재처리하려는 경우에 유용하다.
# producer
./kafka-console-producer.sh --broker-list [인스턴스1의IP]:9092,[인스턴스2의IP]:9092,[인스턴스3의IP]:9092 --topic test
# consumer
./kafka-console-consumer.sh --bootstrap-server [인스턴스1의IP]:9092,[인스턴스2의IP]:9092,[인스턴스3의IP]:9092 --topic test --from-beginning
- 완벽하게 작동한다!
cf)
- 프로젝트를 진행하다보니 프리티어 인스턴스 디폴트 용량이 8GB라 디스크 용량 부족 에러가 떴다.
프리티어는 인스턴스당 30GB까지 무료로 제공되서 용량을 늘리기로 했다.
- "인스턴스 > 스토리지 > 볼륨아이디 > 작업 > 볼륨 수정" 을 통해 인스턴스 볼륨을 조정할 수 있다. 조정 후에는 인스턴스를 재부팅 해야한다.
ref)
https://velog.io/@jwpark06/AWS-EC2%EC%97%90-Kafka-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
https://twofootdog.tistory.com/93
'AWS' 카테고리의 다른 글
MySQL With AWS EC2 (0) | 2023.05.19 |
---|---|
Kafka With AWS EC2 #1 (0) | 2023.05.15 |