1. Tải và giải nén Apache Kafka
Tải bản phân phối Kafka
Chúng ta sẽ tải phiên bản Kafka mới nhất (3.7.0) từ trang chủ Apache. Đảm bảo đã có Java 17+ cài đặt sẵn từ Phần 1.
Truy cập thư mục `/opt` để lưu trữ phần mềm hệ thống, sau đó tải file tar.gz về.
cd /opt
wget https://archive.apache.org/dist/kafka/3.7.0/kafka_2.13-3.7.0.tgz
Kết quả mong đợi: File `kafka_2.13-3.7.0.tgz` được tải về thành công với kích thước khoảng 150MB.
Giải nén và đặt tên thư mục
Giải nén file vừa tải về và đổi tên thư mục thành `kafka` để dễ quản lý cấu hình sau này.
tar -xzf kafka_2.13-3.7.0.tgz
mv kafka_2.13-3.7.0 kafka
rm kafka_2.13-3.7.0.tgz
Kết quả mong đợi: Thư mục `/opt/kafka` được tạo ra chứa toàn bộ source code và binary của Kafka.
Kiểm tra quyền truy cập
Đảm bảo user hiện tại có quyền đọc/ghi vào thư mục này để tránh lỗi permission khi chạy dịch vụ.
chown -R $USER:$USER /opt/kafka
chmod -R 755 /opt/kafka
Kết quả mong đợi: Không có thông báo lỗi, quyền sở hữu thuộc về user hiện hành.
2. Cấu hình Zookeeper
Chỉnh sửa file cấu hình server.properties
Zookeeper là hệ thống coordination cần thiết để Kafka Broker đồng bộ trạng thái. File cấu hình mặc định của Zookeeper nằm trong thư mục `config` của Kafka.
Thay thế toàn bộ nội dung file `/opt/kafka/config/zookeeper.properties` bằng cấu hình sau để chạy standalone trên port 2181.
cat > /opt/kafka/config/zookeeper.properties
Kết quả mong đợi: File cấu hình được ghi đè hoàn chỉnh, không còn comment thừa thãi.
Tạo thư mục data và log cho Zookeeper
Tạo các thư mục dữ liệu và log đã khai báo trong file cấu hình ở trên để tránh lỗi "Permission denied" hoặc crash khi khởi động.
mkdir -p /var/lib/zookeeper
mkdir -p /var/log/zookeeper
chown -R $USER:$USER /var/lib/zookeeper /var/log/zookeeper
Kết quả mong đợi: Các thư mục được tạo thành công với quyền sở hữu đúng.
Khởi động Zookeeper
Khởi động Zookeeper bằng script có sẵn trong thư mục bin. Chúng ta chạy ở chế độ nền (background) bằng dấu `&`.
cd /opt/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties &
Kết quả mong đợi: Console hiện thông báo "STARTING" và "JMX enabled", sau đó quá trình chạy ngầm (PID được hiển thị).
Verify Zookeeper đang hoạt động
Để xác nhận Zookeeper đã sẵn sàng, dùng lệnh `echo` qua netcat hoặc script kiểm tra trạng thái.
echo ruok | nc localhost 2181
Kết quả mong đợi: Nhận được phản hồi `imok` từ server.
3. Cấu hình Kafka Broker
Chỉnh sửa file cấu hình server.properties
Kafka Broker cần được cấu hình để kết nối với Zookeeper và định danh duy nhất (broker.id). File cấu hình nằm tại `/opt/kafka/config/server.properties`.
Thay thế toàn bộ nội dung file bằng cấu hình tối ưu cho môi trường standalone sau:
cat > /opt/kafka/config/server.properties
Kết quả mong đợi: File cấu hình được ghi đè, xác định rõ broker.id và kết nối đến Zookeeper trên localhost.
Tạo thư mục data và log cho Kafka
Tạo thư mục lưu trữ dữ liệu (`log.dirs`) và file log đã khai báo trong cấu hình trên.
mkdir -p /var/lib/kafka
mkdir -p /var/log/kafka
chown -R $USER:$USER /var/lib/kafka /var/log/kafka
Kết quả mong đợi: Thư mục được tạo, sẵn sàng nhận dữ liệu từ Kafka.
Khởi động Kafka Broker
Khởi động Kafka Broker. Lưu ý: Broker sẽ không khởi động thành công nếu Zookeeper chưa chạy hoặc bị lỗi.
cd /opt/kafka
bin/kafka-server-start.sh config/server.properties &
Kết quả mong đợi: Console hiện thông báo "Starting Kafka", kết nối thành công với Zookeeper và lắng nghe trên port 9092.
Verify Kafka Broker đang hoạt động
Để kiểm tra Kafka đã chạy ổn định, ta tạo một topic mẫu và liệt kê các topic hiện có.
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Kết quả mong đợi:
1. Dòng 1: Thông báo "Topic 'test-topic' created".
2. Dòng 2: Danh sách hiển thị `__consumer_offsets`, `__transaction_state`, và `test-topic`.
Điều hướng series:
Mục lục: Series: Triển khai Database Change Data Capture với Debezium và Kafka trên Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt Java
Phần 3: Triển khai Debezium Connector cho PostgreSQL »