bài trước chúng ta đã tiến hành cài đặt và chạy thử Kafka với 1 broker. Tuy nhiên trong thực tế chúng ta cần phải cấu hình Kafka với nhiều broker vì nếu chỉ có 1 broker thì khi broker đó xảy ra lỗi việc truyền thông tin giữa Producer và Consumer sẽ bị gián đoạn và không thể thực hiện được. Do đó, trong bài này chúng ta sẽ tiến hành cấu hình và chạy thử Kafka với 3 brokers trên cùng một máy tính. Trong 3 brokers thì một broker sẽ đóng vai trò là leader còn 2 brokers còn lại là Follower. Dữ liệu sẽ không chỉ được lưu trên một broker mà sẽ được sao chép sang các broker còn lại. Do đó khi broker leader xảy ra lỗi thì các broker follower có thể thay thế leader để tiếp tục thực hiện công việc.

Để cấu hình thêm hai brokers mới, ta copy file server.properties thành hai file server-1.properties và server-2.properties. Trong mỗi file ta chỉnh sửa lại 3 dòng sau đây:

server-1.properties server-2.properties
broker.id=1

listeners=PLAINTEXT://:9093

log.dirs=/tmp/kafka-logs-1

broker.id=2

listeners=PLAINTEXT://:9094

log.dirs=/tmp/kafka-logs-2

Broker.id là ID của từng broker và giá trị này là duy nhất, đại diện cho broker đó. Vì chúng ta chạy cả 3 broker trên cùng một máy tính nên ta phải thay đổi cổng listeners và log.dirs để các broker không trùng nhau.

Tương tự như bài trước, chúng ta sẽ khởi động Zookerper server và 3 brokers bằng lệnh sau (mỗi lệnh là một cửa sổ Command, tổng phải mở 4 cửa sổ).

Tiếp theo chúng ta tạo một topic mới với 1 partition và 3 replicas:

Ta dùng lệnh sau để xem phần mô tả về hoạt động của các brokers:

Dòng đầu tiên của kết quả liệt các các thông tin khái quát như số lượng partition, số lượng replicas. Mỗi một dòng tiếp theo cung cấp thông tin của từng partition. Vì ta chỉ tạo ra một partition nên chỉ có thêm 1 dòng. Trong đó leader là node đang thực hiện vai trò đọc và ghi dữ liệu vào partition tương ứng. Ở đây leader của chúng ta là Node0. Replicas là list các node replicas và Isr (in-sync) là list của các replicas đang alive và có thể trở thành Leader khi Leader hiện tại xảy ra lỗi.

Bây giờ chúng ta thử chạy Producer và Consumer để kiểm tra việc truyển dữ liệu giữa chúng.

Do Node0 đang đóng vai trò là Leader nên giờ ta thử dừng tiến trình này và xem nó sẽ ảnh hưởng như thế nào đến hệ thống Kafka:

  • Trước hết ta lấy Process ID của Node 0

  • Tắt tiến trình này bằng lệnh: taskkill /pid 9396 /f

  • Kiểm tra về hoạt động của các brokers:

Như vậy, sau khi tắt Node0 thì Leader đã được chuyển sang Node1 và Node0 không còn hiện ra trong Isr nữa. Cửa sổ của Consumer hiện ra cảnh bảo ‘Broker may not be available’. Tuy vậy khi ta truyền dữ liệu từ Producer thì bên Consumer vẫn nhận được dữ liệu do lúc này Node1 đã giữ vai trò là Leader thay cho Node0

Tháng Mười Một 12, 2018
ITechSeeker