0

GIẢI MÃ LOG KAFKA: CLUSTER_ID NOT SET LÀ GÌ VÀ NÀO NÓ TRỞ THÀNH THẢM HỌA?

Trên Môi Trường Production: Trái Bom Hẹn Giờ (The Risk) Nếu mang nguyên cấu hình mặc định này lên môi trường thực tế hoặc chạy Cluster, nó sẽ gây ra 2 thảm họa nghiêm trọng:

Hiện tượng "Chia rẽ cụm" (Split-brain): Nếu bạn chạy 3 node Kafka để cân bằng tải, mà không set chung một CLUSTER_ID, thì mỗi node sẽ tự động sinh ra một ID khác nhau. Hậu quả là chúng sẽ từ chối nhận mặt nhau, tạo thành 3 cái cluster riêng lẻ độc lập thay vì một cụm 3 node đồng nhất. Mất kết nối với dữ liệu cũ (Volume Corruption): Khi container bị tắt và khởi tạo lại (recreate), nếu ID lại được random ra một chuỗi mới, Kafka sẽ từ chối đọc dữ liệu từ ổ cứng (Volume) cũ vì nó thấy UUID bị sai lệch. Ứng dụng Backend sẽ không thể lấy lại các message cũ. 4. Giải Pháp Cấu Hình Chuẩn Dành Cho Problem Solver (The How) Để dập tắt dòng log này và chuẩn hóa hệ thống, bạn cần tự sinh ra một mã UUID và cố định nó vào file cấu hình (ví dụ docker-compose.yml).

Bước 1: Tự sinh ra một chuỗi UUID bằng công cụ dòng lệnh (hoặc sinh đại một chuỗi Base64 22 ký tự). Bước 2: Truyền nó vào biến môi trường. Ví dụ, nếu dùng image của Bitnami, hãy thêm dòng này vào file docker-compose.yml: services: kafka: image: bitnami/kafka:latest environment: # Cố định Cluster ID để các node nhận diện nhau và giữ được Data sau khi restart - KAFKA_KRAFT_CLUSTER_ID=bodoikafka-cluster-id-12

Lúc này, hệ thống đã hoàn toàn nằm trong tầm kiểm soát của kỹ sư, kiến trúc sẽ vững như bàn thạch bất chấp việc container có bị restart bao nhiêu lần đi chăng nữa.

💡 Lời Kết Việc đọc hiểu và không bỏ qua các dòng log "Warning" hay "Info" chính là thói quen phân biệt giữa một thợ code và một kỹ sư hệ thống. Dòng chữ nhỏ CLUSTER_ID not set thực chất là cánh cửa mở ra toàn bộ kiến trúc phân tán KRaft hiện đại của Apache Kafka.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí