AWS

Kafka With AWS EC2 #2

PON_Z 2023. 5. 16. 17:55

- 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

https://blog.voidmainvoid.net/325

https://gksdudrb922.tistory.com/193

728x90

'AWS' 카테고리의 다른 글

MySQL With AWS EC2  (0) 2023.05.19
Kafka With AWS EC2 #1  (0) 2023.05.15