Back to articles
Technology Insight

Xây dựng cụm Kafka Mini siêu tinh gọn sử dụng cơ chế KRaft trên một VPS 2GB RAM

June 4, 2026

Giới thiệu xu hướng tối giản hóa hạ tầng Data Streaming

Trong kỷ nguyên của kiến trúc vi dịch vụ (microservices) và xử lý dữ liệu thời gian thực, Apache Kafka đã khẳng định vị thế như một xương sống (backbone) vững chắc cho hệ thống Event Streaming. Tuy nhiên, một trong những rào cản lớn nhất đối với các doanh nghiệp nhỏ, hoặc các lập trình viên khi muốn thử nghiệm Kafka là gánh nặng hạ tầng. Theo cách triển khai truyền thống, Kafka bắt buộc phải đi kèm với Apache Zookeeper để quản lý metadata và bầu chọn Leader.

Việc vận hành song song cả Kafka và Zookeeper không chỉ làm tăng độ phức tạp khi phân bổ tài nguyên mà còn ngốn một lượng lớn bộ nhớ RAM. Điều này khiến việc triển khai Kafka trên các gói Cloud VPS cấu hình thấp (ví dụ: 1 vCPU và 2GB RAM) trở thành một thử thách bất khả thi. May mắn thay, kể từ phiên bản 3.x và chính thức sẵn sàng cho môi trường sản xuất (Production-ready) từ phiên bản 3.3, Apache Kafka đã giới thiệu KRaft (Kafka Raft metadata mode). Cơ chế này loại bỏ hoàn toàn sự phụ thuộc vào Zookeeper, mở ra kỷ nguyên mới cho các cụm Kafka siêu tinh gọn.

Bài viết này sẽ hướng dẫn bạn từng bước chi tiết để cấu hình và khởi chạy một cụm Kafka Mini sử dụng KRaft trên một VPS duy nhất chỉ với 2GB RAM mà vẫn đảm bảo hiệu năng ổn định cho mục đích thử nghiệm (Development) và môi trường kiểm thử (Staging).

---

Tại sao chọn KRaft thay vì Zookeeper cho VPS cấu hình thấp?

Trước khi đi vào các bước cài đặt, chúng ta cần hiểu rõ lý do tại sao KRaft lại là "cứu cánh" cho những hệ thống có tài nguyên hạn chế:

  • Tiết kiệm tài nguyên vượt trội: Không còn Zookeeper đồng nghĩa với việc bạn tiết kiệm được ít nhất 500MB đến 1GB RAM dùng để chạy tiến trình Java của Zookeeper. Toàn bộ tài nguyên này sẽ được nhường lại cho Hệ điều hành và Kafka Broker.
  • Kiến trúc đơn giản (Single Process): Với KRaft, bản thân các Kafka Broker sẽ kiêm nhiệm luôn vai trò quản lý metadata nhờ thuật toán đồng thuận Raft. Bạn không cần phải cấu hình kết nối, đồng bộ hóa giữa hai hệ thống khác nhau nữa.
  • Tốc độ khôi phục nhanh hơn: Khi một Broker gặp sự cố, cơ chế KRaft giúp việc bầu chọn Leader mới diễn ra gần như ngay lập tức (vài mili giây) nhờ dữ liệu được lưu trữ trực tiếp trong các phân vùng metadata nội bộ của Kafka, thay vì phải tải lại từ Zookeeper.
Khuyến nghị từ chuyên gia: Mặc dù cụm Kafka Mini trên VPS 2GB RAM rất tối ưu về chi phí, nó chỉ nên được sử dụng cho môi trường kiểm thử, làm hệ thống Message Queue trung gian cho ứng dụng nhỏ, hoặc làm PoC (Proof of Concept). Không nên áp dụng cấu hình giới hạn này cho các hệ thống Production có lượng traffic lớn.
---

Chuẩn bị môi trường hệ thống

Để đảm bảo quá trình cài đặt diễn ra mượt mà, bạn cần chuẩn bị một máy chủ VPS với các thông số tối thiểu sau:

  • Hệ điều hành: Ubuntu Server 22.04 LTS hoặc Ubuntu 24.04 LTS.
  • Cấu hình: 1 vCPU, 2GB RAM, 20GB Ổ cứng SSD.
  • Quyền truy cập: Quyền root hoặc người dùng có đặc quyền sudo.

Bước 1: Cài đặt Java Runtime Environment (JRE)

Apache Kafka được xây dựng trên nền tảng Java, do đó máy chủ của bạn cần cài đặt Java để chạy. Chúng ta sẽ sử dụng OpenJDK 17 - phiên bản LTS ổn định và hiệu quả nhất hiện nay cho Kafka.

sudo apt update
sudo apt install -y openjdk-17-jre-headless

Kiểm tra lại phiên bản Java sau khi cài đặt thành công bằng lệnh:

java -version

Nếu màn hình hiển thị thông tin openjdk version "17.0.x", bạn đã hoàn thành bước chuẩn bị đầu tiên.

---

Tải và cấu hình Apache Kafka với KRaft

Bước 2: Tải xuống gói cài đặt Kafka

Chúng ta sẽ tải phiên bản Apache Kafka mới nhất từ trang chủ chính thức. Trong hướng dẫn này, chúng ta sử dụng phiên bản Kafka chạy trên nền Scala 2.13. Hãy di chuyển vào thư mục /opt để quản lý mã nguồn tập trung:

cd /opt
sudo wget [https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz](https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz)
sudo tar -xzf kafka_2.13-3.7.0.tgz
sudo ln -s kafka_2.13-3.7.0 kafka
cd kafka

Bước 3: Tối ưu hóa dung lượng RAM cho Java Virtual Machine (JVM)

Mặc định, Kafka sẽ cố gắng chiếm dụng từ 1GB đến 2GB RAM cho tiến trình JVM Heap. Trên một VPS chỉ có 2GB RAM, điều này chắc chắn sẽ dẫn đến lỗi Out Of Memory (OOM), khiến hệ thống tự động tắt tiến trình Kafka hoặc làm treo toàn bộ VPS. Để giải quyết vấn đề này, chúng ta cần cấu hình giới hạn RAM cho Kafka xuống mức tối thiểu (khoảng 512MB).

Hãy thực hiện khai báo biến môi trường bằng cách chạy lệnh sau:

export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M"

Để cấu hình này có hiệu lực vĩnh viễn ngay cả khi khởi động lại VPS, bạn hãy thêm dòng trên vào tệp ~/.bashrc của hệ thống.

Bước 4: Cấu hình file thuộc tính KRaft (config/kraft/server.properties)

Kafka cung cấp sẵn các file cấu hình mẫu cho KRaft trong thư mục config/kraft/. Chúng ta sẽ chỉnh sửa file server.properties để tối ưu hóa cho mô hình một Node duy nhất (Single-node cluster).

sudo nano config/kraft/server.properties

Tìm và cập nhật các tham số cốt lõi sau để phù hợp với môi trường VPS của bạn:# Định danh của node trong cụm node.id=1 # Vai trò của Node: vừa làm Broker dữ liệu, vừa làm Controller quản lý metadata process.roles=broker,controller # Cấu hình địa chỉ kết nối nội bộ cho Controller và Broker controller.quorum.voters=1@localhost:9093 # Địa chỉ lắng nghe kết nối từ các ứng dụng Client bên ngoài listeners=PLAINTEXT://:9092,CONTROLLER://:9093 advertised.listeners=PLAINTEXT://YOUR_VPS_PUBLIC_IP:9092 # Giới hạn số lượng luồng xử lý để tiết kiệm CPU num.network.threads=2 num.io.threads=4 # Cấu hình lưu trữ log và thời gian lưu giữ dữ liệu log.dirs=/var/lib/kafka-logs log.retention.hours=24 log.segment.bytes=1073741824

Lưu ý quan trọng: Hãy thay thế YOUR_VPS_PUBLIC_IP bằng địa chỉ IP công cộng của VPS để các ứng dụng bên ngoài có thể kết nối tới Producer và Consumer thành công.

---

Định dạng Cluster và Khởi chạy Hệ thống

Không giống như cơ chế cũ khi Zookeeper tự động tạo các thư mục quản lý, với KRaft, bạn phải tạo một mã định danh duy nhất (Cluster ID) và định dạng (format) thư mục log trước khi khởi chạy lần đầu tiên.

Bước 5: Tạo Cluster ID và Format Storage

Chạy script đi kèm của Kafka để tạo ngẫu nhiên một mã UUID cho cụm dữ liệu:

KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-cluster-id)"

Tiếp theo, tiến hành định dạng thư mục lưu trữ dữ liệu bằng mã ID vừa tạo:

bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties

Nếu màn hình xuất hiện thông báo Formatting /var/lib/kafka-logs with metadata..., việc định dạng cấu trúc dữ liệu KRaft đã thành công rực rỡ.

Bước 6: Khởi chạy Kafka Server dưới nền

Để chạy Kafka như một tiến trình chạy ngầm (Daemon), bạn có thể sử dụng cờ -daemon tích hợp sẵn:

bin/kafka-server-start.sh -daemon config/kraft/server.propertiesĐể kiểm tra xem Kafka có đang hoạt động ổn định và kiểm soát đúng lượng RAM hay không, bạn hãy sử dụng lệnh top hoặc htop. Bạn sẽ thấy tiến trình Java chỉ chiếm dụng quanh mức 500MB đến 600MB RAM, một con số cực kỳ lý tưởng cho VPS 2GB RAM.

---

Kiểm thử toàn diện cụm Kafka KRaft mới

Để đảm bảo cụm Kafka hoạt động trơn tru từ đầu đến cuối, chúng ta sẽ thực hiện bài kiểm tra tạo Topic, gửi thông điệp (Publish) và nhận dữ liệu (Subscribe).

1. Tạo mới một Topic

Chúng ta sẽ tạo một topic tên là test-vps-topic với 1 Partition và Replication Factor bằng 1:

bin/kafka-topics.sh --create --topic test-vps-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

2. Gửi thông điệp bằng Console Producer

Kích hoạt giao diện dòng lệnh để nhập dữ liệu trực tiếp vào Kafka:

bin/kafka-console-producer.sh --topic test-vps-topic --bootstrap-server localhost:9092

Hãy gõ một vài dòng text như: Hello Kafka KRaft! hoặc Running smooth on 2GB RAM VPS rồi nhấn Enter.

3. Nhận thông điệp bằng Console Consumer

Mở một cửa sổ SSH terminal mới kết nối vào VPS và chạy lệnh đọc dữ liệu từ đầu (from-beginning):

bin/kafka-console-consumer.sh --topic test-vps-topic --from-beginning --bootstrap-server localhost:9092

Nếu toàn bộ thông điệp bạn vừa gõ ở cửa sổ Producer xuất hiện ngay lập tức tại đây, cụm Kafka siêu tinh gọn của bạn đã hoạt động hoàn hảo!

---

Kết luận và các lưu ý tối ưu hóa bổ sung

Cơ chế KRaft thực sự là một bước nhảy vọt của Apache Kafka, giúp đơn giản hóa kiến trúc hạ tầng và mở ra cơ hội tiếp cận công nghệ Event Streaming cho các dự án có ngân sách hạn chế. Việc gói gọn toàn bộ một cụm Kafka ổn định trong một chiếc VPS 2GB RAM không còn là điều không tưởng.

Để hệ thống hoạt động lâu dài không gặp sự cố lỗi bộ nhớ, bạn nên lưu ý thêm các điểm sau:

  • Luôn thiết lập thuộc tính log.retention.hours ngắn (ví dụ từ 12 đến 24 giờ) để tránh việc ổ cứng SSD bị đầy dữ liệu log.
  • Tận dụng cơ chế Swap Memory của Linux (tạo thêm khoảng 1GB-2GB Swap) để làm phương án dự phòng an toàn khi hệ thống gặp các đỉnh tải đột xuất (Spike traffic).
  • Không cấu hình quá nhiều Partitions trên một Node đơn lẻ này vì mỗi Partition đều tiêu tốn tài nguyên quản lý tập tin của hệ điều hành.

Chúc các bạn cấu hình thành công hệ thống Kafka siêu tinh gọn của riêng mình!

Xây dựng cụm Kafka Mini siêu tinh gọn sử dụng cơ chế KRaft trên một VPS 2GB RAM | DPTCloud