03. Kafka 설치 - YBIGTA/EngineeringTeam GitHub Wiki
- 이 문서는 AWS EC2 서버 3대에 각각 Zookeeper, Kafka, Python을 설치하여 Kafka를 이용해 개발하기 위한 개발 환경 구축 과정을 담은 문서입니다.
- 자세한 설명은 생략하고 최대한 명령어 위주로 담았습니다.
- EC2 운영체제의 버전은 Ubuntu Server 16.04 LTS입니다.
- 이 문서는 엔지니어링팀 깃헙위키와 카프카, 데이터 플랫폼의 최강자를 참고하여 작성되었습니다.
- Java
- Apache Zookeeper
- Apache Kafka
- Anaconda for Python3
다음의 단계로 나누어 설치를 진행한다. 이때, 1,2,3 단계는 모두 0단계를 참고하여 만들어진 서로 다른 인스턴스에서 진행한다.
- AWS 가입 과정은 별도로 배포한 PPT를 참고합니다.
- EC2 시작하기
- EC2 인스턴스 생성
# https://aws.amazon.com/ko/getting-started/tutorials/launch-a-virtual-machine/ 에서 참고했습니다.
c. SSH를 사용하여 인스턴스에 연결합니다.
이 사례에서는 사용자 이름이 ec2-user이고, SSH 키는 2단계 파트 d에서 저장한 디렉터리에 보관되어 있으며,
IP 주소는 2단계 파트 f에서 적어두었습니다. 형식은 ssh -i {.pem 파일의 전체 경로} ec2-user@{인스턴스 IP 주소}입니다.
- Windows 사용자: ssh -i 'c:\Users\yourusername\.ssh\MyKeyPair.pem' ec2-user@{IP_Address}
(예: ssh -i 'c:\Users\adamglic\.ssh\MyKeyPair.pem' [email protected])를 입력합니다.
- Mac/Linux 사용자: ssh -i ~/.ssh/MyKeyPair.pem ec2-user@{IP_Address}
(예: ssh -i ~/.ssh/MyKeyPair.pem [email protected])를 입력합니다.
참고: Amazon Linux 이외에 다른 Linux 인스턴스를 시작한 경우, 다른 사용자 이름이 사용될 수 있습니다. 일반적인 사용자 이름에는 ec2-user, root, ubuntu 및 fedora가 있습니다. 로그인 사용자 이름을 알 수 없는 경우, AMI 공급자에게 문의하십시오.
다음과 유사한 응답이 표시됩니다.
The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (10.254.142.33)' can't be established. RSA key fingerprint is 1f:51:ae:28:df:63:e9:d8:cf:38:5d:87:2d:7b:b8:ca:9f:f5:b1:6f. Are you sure you want to continue connecting (yes/no)?
Yes를 입력하고 Enter 키를 누릅니다.
$ cd $HOME
# 파일은 다운로드해 저장할 디렉터리 생성
$ mkdir downloads
# package manager(apt-get)을 최신화
$ sudo apt-get update
- 0. 인스턴스 생성을 참고하여 1개의 서버를 준비합니다.
# 우선 자바를 설치해줍니다.
$ cd $HOME
$ sudo apt-get install openjdk-8-jdk
# wget, tar을 이용하여 Zookeeper를 다운받아 설치합니다.
$ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
$ tar zxf zookeeper-3.4.10.tar.gz
# 설치 파일을 downloads 파일로 옮깁니다.
$ mv zookeeper-3.4.10.tar.gz ./downloads
# symbolic link를 생성한 후에 확인해줍니다.
$ ln -s zookeeper-3.4.10 zookeeper
$ ls -la zookeeper
# Zookeeper가 사용할 데이터 디렉토리를 만들어준 후, vi를 이용해 myid라는 파일을 만들어줍니다.
$ cd $HOME
$ mkdir zookeeper_data
$ echo 1 > ./zookeeper_data/myid
$ cat ./zookeeper_data/myid
# 환경설정을 해줍니다.
$ vi ./zookeeper/conf/zoo.cfg
zoo.cfg 내부에 아래와 같이 적어줍니다. 이때, 인스턴스를 종료하였다 재시작하면 ip주소가 바뀌므로 항상 수정해줘야 합니다.
trickTime=2000
initLimit=10
syncLimit=5
dataDir=~/zookeeper_data
clientPort=2181
server.1={Zookeeper 서버의 ip주소}:2888:3888
$ cd ~/zookeeper
# Zookeeper 실행
$ ./bin/zkServer.sh start
# Zookeeper 종료
$ ./bin/zkServer.sh stop
- 0. 인스턴스 생성을 참고하여 1개의 서버를 준비합니다.
# 우선 자바를 설치해줍니다.
$ cd $HOME
$ sudo apt-get install openjdk-8-jdk
# wget, tar을 이용하여 Kafka를 다운받아 설치합니다.
$ wget http://apache.mirror.cdnetworks.com/kafka/1.0.0/kafka_2.11-1.0.0.tgz
$ tar zxf kafka_2.11-1.0.0.tgz
# 설치 파일을 downloads 파일로 옮깁니다.
$ mv kafka_2.11-1.0.0.tgz ./downloads
# symbolic link를 생성한 후에 확인해줍니다.
$ ln -s kafka_2.11-1.0.0 kafka
$ ls -la kafka
# Kafka가 사용할 데이터 디렉토리를 만들어줍니다.
$ cd $HOME
$ mkdir kafka_data1
$ mkdir kafka_data2
# 환경설정을 해줍니다.
$ vi ~/kafka/config/server.properties
server.properties 파일의 아래 값들만 찾아서 변경해줍니다. 이때, ip 주소는 인스턴스 재시작시 변경되므로 항상 변경해줘야 합니다.
broker.id=1
log.dirs=~/kafka_data1,~/kafka_data2
zookeeper.connect={Zookeeper서버의 ip주소}:2181/kafka
server.properties 파일에 아래 내용을 추가해줍니다.
delete.topic.enable=true
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://{Kafka서버의 ip주소}:9092
$ cd ~/kafka
# Kafka 실행
$ ./bin/kafka-server-start.sh ./config/server.properties
# Kafka 종료
$ ./bin/kafka-server-stop.sh
편의를 위하여 Anaconda를 이용하여 설치합니다.
- 0. 인스턴스 생성을 참고하여 1개의 서버를 준비합니다.
# wget을 이용해 설치파일을 다운로드 받습니다.
$ cd ~/downloads
$ wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
# bash를 이용해 설치파일을 실행시킵니다.
$ bash Anaconda3-5.1.0-Linux-x86_64.sh
# License 관련된 것을 묻는 화면에서 엔터, 'yes'를 입력해 진행합니다.
# 설치 과정에 아래와 같은 메세지가 나올 것입니다.
# /home/ubuntu/anaconda3 이라는 경로에 anaconda3를 설치할 것이라는 메세지입니다.
# 특별히 선호하는 위치가 없다면 엔터를 눌러 진행합니다.
Anaconda3 will now be installed into this location:
/home/ubuntu/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
# 설치가 완료되면 아래와 같은 메세지가 나옵니다.
# 우리는 별도로 환경변수 설정을 해줄 것이기 때문에 no라고 입력합니다.
installation finished.
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/ubuntu/.bashrc ? [yes|no]
[no] >>>
# 다음에 VSCode를 설치할 것이냐고 묻는 메세지가 나옵니다.
# no라고 입력하고 설치를 종료합니다.
# 비밀번호를 설정해줍니다.
$ cd $HOME
$ jupyter notebook --generate-config
$ jupyter notebook password
Enter password: ****
Verify password: ****
### 3.4 통신 과정에서 암호화를 위해 SSL 설정하기
```bash
# 인증서를 생성할 디렉터리 만들기
$ mkdir ~/certs
$ cd ~/certs
# 365일동안 유효한 인증서를 작성합니다.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
$ cd ~
$ vim ~/.jupyter/jupyter_notebook_config.py
jupyter_notebook_config.py 파일을 열면 많은 내용이 주석처리 되어있습니다. 아래의 내용을 파일에 추가한 뒤 파일을 닫습니다.
c = get_config()
# Notebook config this is where you saved your pem cert
c.NotebookApp.certfile = u'/home/ubuntu/certs/mycert.pem'
c.NotebookApp.keyfile = u'/home/ubuntu/certs/mykey.key'
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
# Don't open browser by default
c.NotebookApp.open_browser = False
# Fix port to 10001
c.NotebookApp.port = 10001
# vim으로 bash_profile를 엽니다. 없으면 만듭니다.
$ vim ~/.bash_profile
완성된 ~/.bash_profile의 내용은 아래와 같습니다.
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
## User specific environment and startup programs
# Anaconda
export ANACONDA_HOME="/home/ubuntu/anaconda3"
export PATH=${ANACONDA_HOME}/bin:$PATH
설정을 마친 뒤엔 jupyter를 실행시켜줍니다.
$ jupyter notebook
각자의 ec2 주소로 브라우저를 이용해jupyter에 접속합니다. http가 아닌 https임에 유의합니다. 접속이 되는 것을 확인한 뒤에 Jupyter를 ctrl+c로 종료합니다.
https://${Python서버 ip 주소}:10001
- 2181, 9092, 10001번 port는 모든 곳에서 접속할 수 있게 보안그룹을 설정해줍니다.
- zookeeper와 kafka의 ip는 인스턴스 재시작시 바뀌므로 계속 수정해줘야한다.