hellokitty-coding-club / LGTM-Backend

Looks good to me (LGTM) 코드 리뷰 매칭 플랫폼 Backend
11 stars 3 forks source link

카프카 클러스터 구성 가이드 #87

Closed ray-yhc closed 1 year ago

ray-yhc commented 1 year ago

개요

아키텍처

하드웨어 사양

설치 가이드

1. 인스턴스 생성

자바가 설치되어 있지 않다면 자바 설치

sudo apt-get update
sudo apt-get install openjdk-11-jdk

host 명을 간편하게 설정하기 위해 ip주소와 이름을 매핑하는 설정을 추가한다.

cd /etc
sudo vi ./hosts

/etc/hosts 에 들어가서 다음 내용을 추가해준다.

2. 주키퍼 앙상블 설치

wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.2/apache-zookeeper-3.8.2-bin.tar.gz
tar -xf ./apache-zookeeper-3.8.2-bin.tar.gz
mv ./apache-zookeeper-3.8.2-bin ~/zookeeper/
mkdir -p ~/data/zookeeper/

# 숫자 : 각 주키퍼 서버를 구분하기 위한 숫자를 입력한다.
echo 1 > ~/data/zookeeper/myid

# 샘플 설정파일을 복사해 설정파일로 사용한다.
cp ./zookeeper/conf/zoo_sample.cfg  ./zookeeper/conf/zoo.cfg
vi ./zookeeper/conf/zoo.cfg

./zookeeper/conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/ubuntu/data/zookeeper

# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=60

# server.{id}={ip}:{peerPort}:{leaderPort}
server.1=broker1:2888:3888
server.2=broker2:2888:3888
server.3=broker3:2888:3888
./zookeeper/bin/zkServer.sh start
vi ./zookeeper/logs/zookeeper-ubuntu-server-ip-{xxx}.out
./zookeeper/bin/zkCli.sh -server 10.0.75.183:2181,10.0.90.35:2181,10.0.71.136:2181

3. 카프카 클러스터 설치

wget https://archive.apache.org/dist/kafka/3.2.0/kafka_2.13-3.2.0.tgz
tar -xf ./kafka_2.13-3.2.0.tgz
mv ./kafka_2.13-3.2.0 ./kafka
rm ./kafka_2.13-3.2.0.tgz
mkdir -p ./data/broker

vi ./kafka/config/server.properties
nohup ./kafka/bin/kafka-server-start.sh ./kafka/config/server.properties > broker.log &

클라이언트가 카프카 클러스터 접속 시 동작

  1. 클라이언트는 클러스터 내 어떤 브로커에도 접근할 수 있다.
  2. 브로커는 [server.properties](http://server.properties/) 내의 listeners=PLAINTEXT://{...}:9092 설정을 만족하는 요청에 대해 연결을 응답하고, 이후 연결 정보를 제공한다.
  3. 클라이언트는 (1)에서 접속한 브로커로부터 카프카 연결 정보와, 이후에 접속할 주소를 제공받는다. 이후에 접속할 주소는 [server.properties](http://server.properties/) 내의 advertised.listeners=PLAINTEXT://your.host.name:9092 에서 설정할 수 있다.
  4. 이후 제공된 주소로 재접속하여 작업을 진행한다.

4. 접속 테스트

~/kafka/bin/kafka-topics.sh --create --bootstrap-server 10.0.75.183:9092,10.0.90.35:9092,10.0.71.136:9092 \
  --replication-factor 3 --partitions 3 --topic test

~/kafka/bin/kafka-topics.sh --bootstrap-server 10.0.75.183:9092,10.0.90.35:9092,10.0.71.136:9092 \
--list

~/kafka/bin/kafka-console-producer.sh --broker-list 10.0.75.183:9092,10.0.90.35:9092,10.0.71.136:9092 \
  --topic test

~/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.0.75.183:9092,10.0.90.35:9092,10.0.71.136:9092 \
  --topic test --from-beginning

image

image

잘 접속되고 실행된다.

great-park commented 1 year ago

카프카 토픽 구성 관련

현재 3개의 브로커에서 6개의 토픽을 구축하였습니다.