Skip to content

카프카 도입기

Kimun Kim edited this page Oct 11, 2021 · 11 revisions

레퍼런스: AWS에 카프카 클러스터 설치하기(ec2, 3 brokers) by 데브원영

위 레퍼런스를 주로 참고하였으나, 구축 환경이 좀 다른지 권한 문제가 있어 찜꽁 환경에 맞게 풀어 쓴다.

들어가기

Spring Boot와 Kafka 연동까지의 과정을 크게 3가지로 이루어진다고 볼 수 있다.

  1. 주키퍼 설치
  2. 카프카 설치
  3. Logging 프레임워크(e.g., Logback) <-> 카프카 연동

다음과 같은 환경 설정하에서 진행하였다.

  • 서버 인스턴스: AWS EC2, Ubuntu 18.04
  • Java 11 (인스턴스에 미리 깔아 놓는다)
  • 로깅 프레임워크: Logback
  • 클러스터를 구성하는 서버 개수: 3

이벤트 브로커는 고가용성에 상당한 목적의식을 두고 있기 때문에, 3대의 서버를 이용해서 카프카 클러스터를 구축한다.


0. 구성의 편리를 위한 호스트 별칭 세팅

localhost -> 127.0.0.1 로 연결되는 것처럼, 아이피 번호를 직접 타이핑하지 않고 별칭을 지정할 수 있다면 환경 구성이 상당히 편리해진다.

  • i) 서버 3대의 IP를 미리 확보해놓는다.
  • ii) 각 서버에 접속해 /etc/hosts(확장자 없음)내에 별칭을 등록한다.
$ sudo vim /etc/hosts
  • iii) 자신의 서버를 지칭하는 별칭의 IP는 0.0.0.0로 등록한다.

e.g., 2번 카프카 서버를 작업중인 경우

${1번 서버의 IP} ${1번 서버 별칭}
0.0.0.0 ${2번 서버 별칭} 
${3번 서버의 IP} ${3번 서버 별칭}

예시 (2번 서버를 작업중인 경우)

192.168.2.112 KAFKA-1
0.0.0.0 KAFKA-2
192.168.2.158 KAFKA-3
# 같은 네트워크에 속해있다면 위와 같이 사설 IP를 사용해도 상관 없다.

1. Zookeeper 설치

Zookeeper란?

  • 카프카의 클러스터링을 관리해주는 역할
  • 카프카는 이벤트를 주고 받는 기능에 치중되어 있다면, 주키퍼는 클러스터를 구성하는 일부 서버의 장애 상황에 대응하는 역할(e.g., 다른 카프카로 요청을 선회시킨다든가, 리더 노드를 다시 선출한다든가 등)을 한다.

설치 과정

설치 파일이 분산되는 apt-get보다 압축을 받아 풀어 사용하는 것이 편하므로, 압축 파일을 받아 사용하는 방법을 서술한다.

  • i) 압축 파일을 다운받고 풀어준다.
$ wget https://archive.apache.org/dist/zookeeper/zookeeper-x.x.x/zookeeper-x.x.x.tar.gz #버전은 x로 표시했다. 상황에 맞게 알맞는 버전을 다운받는다.
$ tar xvf zookeeper-x.x.x.tar.gz
  • ii) 압축을 푼 폴더 -> conf 폴더에 들어가 zoo.cfg 파일을 만들고 다음의 설정을 입력한다. *필요에 따라 적절히 커스터마이징한다. 예를 들어 찜콩은 보안 그룹 정책 때문에 clientPort를 8000으로 둔 상태
$ cd zookeeper-x.x.x/conf
$ vim zoo.cfg
# zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181               # 클라이언트 통신 포트
initLimit=20
syncLimit=5
server.1=KAFKA-1:2888:3888    # 각 서버들의 별칭 : 주키퍼 간 동기화 포트 : 주키퍼 간 마스터 선출 포트
server.2=KAFKA-2:2888:3888
server.3=KAFKA-3:2888:3888
  • iii) /var/lib/zookeeper/myid 파일(확장자 없음)을 만들고 자기 카프카 서버의 번호를 작성해야한다.
$ cd /var/lib
$ mkdir zookeeper
$ cd zookeeper
$ sudo vim myid

myid 파일에 서버 번호(1, 2, 3...)을 입력한다.

3번 서버에서 작업중이라면 다음의 cat 명령어의 출력값이 3이어야한다.

$ cat /var/lib/zookeeper/myid # 3
  • iv) 실행 및 확인
$ cd ~/zookeeper-x.x.x/bin # (주키퍼 설치 경로/bin 폴더)
$ sudo sh zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/ec2-user/zookeeper-x.x.x/bin/../conf/zoo.cfg
Strating zookeeper ... STARTED

2. Kafka 설치

  • 주키퍼의 포트와 카프카의 포트를 헷갈리지 않는다.
  • i) 다운 받고 압축을 푼다. 마찬가지로 버전은 상황에 맞게 다운받는다.
$ wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
$ tar xvf kafka_2.11-2.1.0.tgz
  • ii) 설치폴더 -> config 폴더의 server.properties를 열어 다음의 값들을 수정한다. *모두 주석처리되어 있는 옵션 항목들이니 찾아서 주석을 해제하고 값을 세팅하거나, 그냥 마지막 줄에 추가한다.
# test-broker02인 경우

broker.id=2
listeners=PLAINTEXT://:9092    # 카프카 기본 외부 오픈 포트
advertised.listeners=PLAINTEXT://${현 서버의 공인 IP}:9092   # 이 옵션 값으로는 반드시 공인 IP + 카프카 포트가 들어가야 한다. 클라이언트에게 접속할 IP를 알려줄 때 사용되기 때문!
zookeeper.connect=KAFKA-DEV-1:2181,KAFKA-DEV-2:2181,KAFKA-DEV-3:2181 # 각 서버들의 별칭과 주키퍼의 포트를 쉼표로 구분지어 나열한다.
  • iii) 실행 및 확인
$ cd ~/kafka_x.x-x.x.x/bin # (kafka 설치 경로/bin)
$ sudo sh bin/kafka-server-start.sh config/server.properties
Clone this wiki locally