1. Tối ưu hóa Kernel và Phân vùng Disk cho Ubuntu 24.04
Tăng giới hạn số lượng file mở (ulimit) để tránh lỗi "Too many open files" khi Flink xử lý hàng ngàn connection.
Chỉnh sửa file cấu hình hệ thống để áp dụng cho tất cả người dùng.
sudo nano /etc/security/limits.conf
Thêm 2 dòng sau vào cuối file, lưu và đóng file (Ctrl+O, Enter, Ctrl+X).
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
Verify: Chạy lệnh ulimit -n sau khi đăng nhập lại để kiểm tra giá trị mới.
ulimit -n
Kết quả mong đợi: Trả về số 65535.
Giảm Swap Usage cho hiệu năng cao
Apache Flink hoạt động tốt nhất khi RAM được sử dụng trực tiếp, swap thường gây ra latency không mong muốn.
Tắt swap tạm thời để kiểm tra hoặc cấu hình swappiness thấp hơn.
sudo swapoff -a
Để cấu hình vĩnh viễn, chỉnh file /etc/sysctl.conf.
sudo nano /etc/sysctl.conf
Thêm hoặc sửa dòng sau trong file.
vm.swappiness=1
Áp dụng cấu hình ngay lập tức.
sudo sysctl -p
Verify: Kiểm tra giá trị swappiness hiện tại.
cat /proc/sys/vm/swappiness
Kết quả mong đợi: Trả về số 1.
2. Cài đặt OpenJDK và Cấu hình Biến Môi trường
Apache Flink 1.18+ yêu cầu Java 17 hoặc Java 21. Ubuntu 24.04 mặc định có thể chưa có bản mới nhất trong repo, cần cài đặt thủ công hoặc dùng PPA.
Cài đặt OpenJDK 17 từ kho lưu trữ chính thức của Ubuntu.
sudo apt update && sudo apt install -y openjdk-17-jdk
Cấu hình biến môi trường JAVA_HOME để Flink nhận diện đúng JDK.
Chỉnh sửa file profile toàn hệ thống.
sudo nano /etc/profile.d/java.sh
Thêm nội dung sau vào file (giả định đường dẫn mặc định của OpenJDK 17).
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
Áp dụng biến môi trường ngay lập tức cho session hiện tại.
source /etc/profile.d/java.sh
Verify: Kiểm tra phiên bản Java và biến môi trường.
java -version && echo $JAVA_HOME
Kết quả mong đợi: Hiển thị "openjdk version "17.0.x..." và đường dẫn "/usr/lib/jvm/java-17-openjdk-amd64".
3. Tải và Giải nén Apache Flink 1.18+
Thiết lập thư mục làm việc chuẩn cho Flink để quản lý dễ dàng.
sudo mkdir -p /opt/flink && sudo chown $USER:$USER /opt/flink
Tải bản stable mới nhất (ví dụ 1.18.1) từ trang chủ Apache.
cd /opt/flink && wget https://dlcdn.apache.org/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz
Giải nén gói file vào thư mục hiện tại.
tar -xvf flink-1.18.1-bin-scala_2.12.tgz
Đổi tên thư mục giải nén cho gọn gàng (bỏ đuôi version nếu muốn, nhưng giữ nguyên cũng được để dễ revert).
mv flink-1.18.1-bin-scala_2.12 flink
Xóa file tgz để tiết kiệm dung lượng.
rm flink-1.18.1-bin-scala_2.12.tgz
Verify: Kiểm tra cấu trúc thư mục và file bin.
ls -la /opt/flink/flink/bin
Kết quả mong đợi: Thấy các file script như start-cluster.sh, stop-cluster.sh.
4. Cấu hình Quyền Truy cập và Firewall (UFW)
Apache Flink Standalone yêu cầu các cổng TCP cụ thể để giao tiếp giữa JobManager và TaskManager, cũng như Web UI.
Bật firewall UFW và cấu hình các cổng mặc định của Flink.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Cho phép SSH trước để tránh mất kết nối.
sudo ufw allow ssh
Cấu hình cổng cho JobManager (Web UI, RPC, High Availability).
sudo ufw allow 8081/tcp
sudo ufw allow 6123/tcp
sudo ufw allow 6124/tcp
Cấu hình cổng cho TaskManager (RPC, Data).
sudo ufw allow 6125/tcp
sudo ufw allow 6126/tcp
Bật firewall.
sudo ufw enable
Verify: Kiểm tra trạng thái firewall và các quy tắc đã thêm.
sudo ufw status verbose
Kết quả mong đợi: Hiển thị "Status: active" và liệt kê các cổng 8081, 6123-6126, 22 ở trạng thái "ALLOW".
Cấu hình file flink-conf.yaml để sử dụng cổng đã mở
Chỉnh sửa file cấu hình chính của Flink để khớp với firewall.
sudo nano /opt/flink/flink/conf/flink-conf.yaml
Thêm hoặc chỉnh sửa các tham số sau (xóa dấu # nếu có).
jobmanager.rpc.address: 0.0.0.0
jobmanager.rpc.port: 6123
jobmanager.web.port: 8081
taskmanager.rpc.port: 6125
Lưu file (Ctrl+O, Enter, Ctrl+X).
Verify: Đọc lại file để đảm bảo cấu hình đã được lưu.
grep -E "rpc.address|rpc.port|web.port" /opt/flink/flink/conf/flink-conf.yaml
Kết quả mong đợi: Hiển thị các dòng cấu hình đã chỉnh sửa với giá trị đúng.
Điều hướng series:
Mục lục: Series: Triển khai Database Stream Processing với Apache Flink SQL và Ubuntu 24.04
Phần 2: Cấu hình kiến trúc Standalone và chạy job đơn giản đầu tiên »