Cài đặt Kafka Cluster trên hệ điều hành Ubuntu - Phần 1/2
Giới thiệu
Trong bài viết này mình sẽ không nói về lý thuyết của Apache Kafka mà chỉ tập trung vào từng bước cài đặt một Kafka Cluster với 3 brokers. Phần lý thuyết mình sẽ nói ở một bài viết khác
Có thể tóm tắt quá trình cài đặt Kafka Cluster trong bài viết này thành 3 bước chính:
- Setup các server, thư viện, package, download Kafka
- Cấu hình Zookeeper và bật Zookeeper
- Cấu hình Kafka và bật Kafka
Các phiên bản của các công cụ mình sử dụng trong bài viết này như sau:
- Instance type là t2.small của AWS EC2
- Kafka 3.4.1
- Hệ điều hành Ubuntu 20.04 LTS
- JDK 11.0.19
Để thực hành bài này mọi người nên có một chút kiến thức về AWS nhé
Bước 1: Cài đặt máy
1.1 Tạo Security Group
Tạo một security Group, cần mở các port dưới đây:
- 22: Port để SSH vào các broker
- 2181: port để Kafka giao tiếp với Zookeeper
- 9092: port để Kafka làm việc với Producer và Consumer
- 2888: là port để các broker giao tiếp với nhau trong cùng cluster
- 3888: port để các Zookeeper làm việc và lựa chọn một server làm Leader và các server còn lại làm Follower. Leader node cũng dùng port này để gửi các heartbeat message đến các follower để kiểm tra kết nối
Để tăng độ bảo mật thì mọi người có thể setup các port 2888,3888,2181 nằm chung một subnet thay vì cho phép truy cập từ mọi IP như vậy
1.2 Tạo instance AWS EC2
Ở bước này tiến hành tạo 3 instance EC2 có hệ điều hành Ubuntu 20.04 LTS trên AWS sử dụng Security Group vừa tạo ở bước 1.1. Các thao tác tạo instance cụ thể thì mình không nói ở đây.
Có một lưu ý là cấu hình tối thiểu nên là t2.small (1vCPU, 2GB RAM), vì khi cài JDK thì yêu cầu phần cứng tối thiểu là 1GB RAM nên phải chọn cấu hình nhiều hơn 1GB RAM để có thể chạy những tác vụ khác
1.3 Cài đặt package
Thực hiện các câu lệnh ở bước này trên cả 3 servers
Update và Upgrade
1
sudo apt update && sudo apt upgrade -y
Cài đặt các package
1
sudo apt install -y wget
Cài đặt JDK
1
sudo apt -y install default-jdk
Kiểm tra phiên bản
1
2
3
4
5
java -version
# openjdk version "11.0.19" 2023-04-18
# OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1)
# OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing)
1.4 Download Kafka
Thực hiện các câu lệnh ở bước này trên cả 3 servers
Download Kafka phiên bản stable hiện tại 3.4.1
1
wget https://downloads.apache.org/kafka/3.4.1/kafka_2.13-3.4.1.tgz
Giải nén và đổi tên thư mục
1
tar -xvzf kafka_2.13-3.4.1.tgz && mv kafka_2.13-3.4.1/ kafka/
1.5 Thêm địa chỉ IP
Bước này ta sẽ gán các địa chỉ IP thành các host name để có thể dùng trong việc cấu hình Zookeeper và Kafka
Giả sử địa chỉ IP của các server là:
- Server 1: 54.151.243.125
- Server 2: 54.179.131.167
- Server 3: 13.212.222.12
Ta sẽ thực hiện câu lệnh sau để thêm vào file /etc/hosts
:
Server 1
1 2 3 4 5 6
echo "0.0.0.0 kafka1 0.0.0.0 zookeeper1 54.179.131.167 kafka2 54.179.131.167 zookeeper2 13.212.222.121 kafka3 13.212.222.121 zookeeper3" | sudo tee --append /etc/hosts
Server 2
1 2 3 4 5 6
echo "54.151.243.125 kafka1 54.151.243.125 zookeeper1 0.0.0.0 kafka2 0.0.0.0 zookeeper2 13.212.222.121 kafka3 13.212.222.121 zookeeper3" | sudo tee --append /etc/hosts
Server 3
1 2 3 4 5 6
echo "54.151.243.125 kafka1 54.151.243.125 zookeeper1 54.179.131.167 kafka2 54.179.131.167 zookeeper2 0.0.0.0 kafka3 0.0.0.0 zookeeper3" | sudo tee --append /etc/hosts
Lưu ý: Không nhất thiết Zookeeper và Kafka luôn luôn có cùng địa chỉ IP. Nếu chúng được cài đặt trên các server khác nhau thì cần tùy chỉnh lại địa chỉ IP cho tương ứng
Bước 2: Cấu hình Zookeeper
Trong bài viết này mặc định cả 3 servers đều cài Zookpeer. Tuy nhiên như đã nói, Zookeeper và Kafka có thể ở trên 2 server khác nhau hoặc giống nhau, không nhất thiết tất cả server được tạo ra đều phải cài Zookeeper. Vì vậy, trong thực tế, chỉ những server nào được chỉ định cài đặt Zookeeper thì thực hiện Bước 2 này.
2.1 Tạo thư mục tmp/zookeeper
1
mkdir -p tmp/zookeeper
thư mục này sẽ là dataDir trong file zookeeper.properties
2.2 Tạo file myid vào thư mục tmp/zookeeper
myid
là file chứa một số nguyên làm id cho broker. Các server khác nhau của cùng 1 cluster kafka sẽ có các id khác nhau
Server 1
1
echo "1" > /home/ubuntu/tmp/zookeeper/myid
Server 2
1
echo "2" > /home/ubuntu/tmp/zookeeper/myid
Server 3
1
echo "3" > /home/ubuntu/tmp/zookeeper/myid
2.3 Chỉnh sửa file zookeeper.properties
Di chuyển vào trong thư mục kafka/
1
cd kafka/
Xóa đi file zookeeper.properties
cũ và tạo file mới
1
rm config/zookeeper.properties && nano config/zookeeper.properties
Copy và Paste nội dung dưới đây
1
2
3
4
5
6
7
8
9
dataDir=/home/ubuntu/tmp/zookeeper
clientPort=2181
maxClientCnxns=128
tickTime=2000
initLimit=10
syncLimit=5
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888
Bấm Ctrl + X → bấm Y → bấm Enter để thoát
Giả sử Server 1 không được chỉ định cài Zookeeper thì ta sẽ bỏ dòng server.1=zookeeper1:2888:3888 ra khỏi file
2.4 Bật Zookeeper
Chạy câu lệnh dưới đây để bật Zookeeper
1
bin/zookeeper-server-start.sh config/zookeeper.properties
Param -daemon được thêm vào để Zookeeper có thể chạy ngầm. Có thể bỏ param này khi cần test, fix bug
1
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2.5 (Optional) Setup Zookeeper thành một service
Bước này nhằm mục đích làm cho việc khởi tạo Zookeeper thành một service. Nó có một số lợi ích như:
- Khi server có sự cố cần reboot thì sẽ tự động bật lại Zookeeper thay vì phải bật thủ công
- Dễ quản lý các tác vụ chạy ngầm
Tạo file /etc/init.d/zookeeper
1
sudo nano /etc/init.d/zookeeper
Copy và paste nội dung dưới đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/sh
#
# zookeeper Start/Stop zookeeper
#
# chkconfig: - 99 10
# description: Standard script to start and stop zookeeper
DAEMON_PATH=/home/ubuntu/kafka/bin
DAEMON_NAME=zookeeper
PATH=$PATH:$DAEMON_PATH
# See how we were called.
case "$1" in
start)
# Start daemon.
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is already running";
else
echo "Starting $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-start.sh -daemon /home/ubuntu/kafka/config/zookeeper.properties
fi
;;
stop)
echo "Shutting down $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-stop.sh
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is Running as PID: $pid"
else
echo "Zookeeper is not Running"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
Sau khi tạo file, chạy lần lượt 3 câu lệnh sau đây
1
2
3
sudo chmod +x /etc/init.d/zookeeper
sudo chown root:root /etc/init.d/zookeeper
sudo update-rc.d zookeeper defaults
Trước khi bật Zookeeper, cần phải tắt Zookeeper đã chạy ngầm ở bước 1.4
1
bin/zookeeper-server-stop.sh
Sau đó bật lại bằng lệnh service
1
2
sudo service zookeeper start
sudo service zookeeper status
Như vậy là đã hoàn thành cài đặt Zookeeper. Mình xin kết thúc phần 1 tại đây, sang phần tiếp theo sẽ tiếp tục setup Kafka và bắt đầu sử dụng nhé