[Kafka] Clustering

CHAN LIM·2024년 2월 22일
0

Kafka

목록 보기
12/13
post-thumbnail

Kafka Clustering

Kafka는 실사용에서 단일로 거의 쓰이지 않는다.
따라서, 클러스터링 과정을 익혀보자


0. 준비

  • 클러스터링할 머신
    • 작성자는 3대의 가상 머신

여담

  • 사진은 보안 그룹 (인스턴스는 지워짐)

사실 사전에 계획한 과정은
AWS EC2로 진행할 생각이었지만
Free Tier로는 Apache Kafka는 커녕 Zookeeper를 구동하기만 해도 버거워하여 어쩔 수 없이 서버에서 진행.


1. Java 설치

  • 과정 중 환경 변수는 설정하지 않아도 잘 작동함을 확인했다.

2. Kafka 설치

위의 링크는 Confluent Kafka 설치 과정이다.

후술할 부분은 Apache Kafka 설치 과정을 진행할 것이다.

  • 사실 무엇을 사용해도 동일하니 취향 것 선택하면 된다.

Apache Kafka 설치

각 머신마다 설치한다.

# 원하는 디렉터리에 이동한 후,

wget http://mirror.navercorp.com/apache/kafka/3.3.2/kafka_2.13-3.6.1.tgz

tar -xvzf kafka_2.13-3.6.1.tgz`

rm kafka_2.13-3.6.1.tgz

원하는 버전은 여기서 확인 (네이버 미러 링크)

  • 네이버 미러를 사용하는 이유
    • 네이버가 인증한 안정적인 최신 버전

KAFKA_HOME 환경변수 추가

cd ~

sudo vi .bashrc
# 또는
sudo nano .bashrc

# 해당 파일 맨 밑에 다음 라인 추가
export KAFKA_HOME=/home/{머신 이름}/{카프카 설치 경로}

# 적용
source .bashrc

cd $KAFKA_HOME
# 결과는 해당 디렉터리로 이동

3. Kafka 설정 (중요)

3.1 /etc/hosts 설정

/etc/hosts는
Unix 및 Unix 계열 운영 체제에서 호스트 이름과 IP 주소를 매핑하는 데 사용되는 로컬 호스트 파일

간단히 말해서,
머신 내의 DNS

이 설정으로
각 머신의 IP주소를 맵핑하여 편리하게 설정할 수 있게 할 예정

sudo vi /etc/hosts

{server_ip} kafka_node1
{server_ip} kafka_node2
{server_ip} kafka_node3
  • server_ip는 각 머신의 IP주소를 입력한다.
    • 본인은 kafka_node{번호}로 설정

3.2 Zookeeper 설정

Zookeeper에 대해선...

vi $KAFKA_HOME/config/zookeeper.properties

# 다음과 같이 변경 및 추가
......
# snapshot 데이터를 저장할 경로를 지정
dataDir=/home/{머신 이름}/{카프카 설치 경로}/data
......
# 초기화 및 싱크에 따른 시간 제한 설정
initLimit=20
syncLimit=5
......
# 멀티 서버 설정
# server.(zookeeper_server.pid의 내용)=(host name 이나 host ip):2888:3888
server.1=kafka_node1:2888:3888
server.2=kafka_node2:2888:3888
server.3=kafka_node3:2888:3888
......
  • 앙상블을 이루기 위한 서버의 정보
    • 2888은 동기화를 위한 포트
    • 3888은 클러스터 구성시 leader를 산출하기 위한 포트
    • 여기서 서버의 id 를 dataDir 에 설정해 줘야 한다.
# 이후 myid 설정
echo "1" > $KAFKA_HOME/data/myid

여기서, myid 설정은 머신마다 다르게 설정한다.

  • 본인에 경우, 첫번째 머신은 1, 그 다음 2 ...

3.3 Kafka server 설정

vi $KAFKA_HOME/config/server.properties
......
# 머신마다 번호는 다르게
broker.id=1
......
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka_node1:9092
......
# 기존 Log 디렉터리는 tmp에 있어 임시로 저장하므로,
# 다음과 같이 변경하여 영구적으로 볼 수 있게 저장한다.
log.dirs=/home/ubuntu/kafka/kafka_2.13-3.6.1/logs
......
zookeeper.connect=kafka_node1:2181,kafka_node2:2181,kafka_node3:2181

4. Zookeeper, Kafka 실행

# kafka_node1
$KAFKA_HOME/bin/zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

# kafka_node2
$KAFKA_HOME/bin/zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

# kafka_node3
$KAFKA_HOME/bin/zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글