-
Notifications
You must be signed in to change notification settings - Fork 20
카프카 도입기
Kimun Kim edited this page Oct 11, 2021
·
11 revisions
레퍼런스: AWS에 카프카 클러스터 설치하기(ec2, 3 brokers) by 데브원영
위 레퍼런스를 주로 참고하였으나, 구축 환경이 좀 다른지 권한 문제가 있어 찜꽁 환경에 맞게 풀어 쓴다.
Spring Boot와 Kafka 연동까지의 과정을 크게 3가지로 이루어진다고 볼 수 있다.
- 주키퍼 설치
- 카프카 설치
- Logging 프레임워크(e.g., Logback) <-> 카프카 연동
다음과 같은 환경 설정하에서 진행하였다.
- 서버 인스턴스: AWS EC2, Ubuntu 18.04
- Java 11 (인스턴스에 미리 깔아 놓는다)
- 로깅 프레임워크: Logback
- 클러스터를 구성하는 서버 개수: 3
이벤트 브로커는 고가용성에 상당한 목적의식을 두고 있기 때문에, 3대의 서버를 이용해서 카프카 클러스터를 구축한다.
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를 사용해도 상관 없다.
- 카프카의 클러스터링을 관리해주는 역할
- 카프카는 이벤트를 주고 받는 기능에 치중되어 있다면, 주키퍼는 클러스터를 구성하는 일부 서버의 장애 상황에 대응하는 역할(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
- 주키퍼의 포트와 카프카의 포트를 헷갈리지 않는다.
- 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