Bài viết dựa trên session Online talk thứ 2 của Confluence: Apache Kafka Architecture & Fundamentals Explained, nội dung chủ yếu về vai trò của Kafka trong hệ thống Event — driven, giải thích, mô tả các khái niệm, thành phần của Kafka.
The Data sources
Như đã nói ở bài trước, hệ thống Event — Driven xoay quanh các sự kiện (event), một đơn hàng mới được đặt trên trang thương mại điện tử, một kiện hàng được xuất kho, một giao dịch tài chính online vừa thực hiện hay đơn giản hơn, bạn vừa post 1 tấm ảnh lên Facebook. Đó là các sự kiện, thực tế những sự kiện luôn diễn ra quanh ta. Tuy nhiên, khi có Big Data và các hệ thống xử lý đủ lớn, chúng ta mới dần quan tâm hơn đến các sự kiện, tìm cách thu thập và phân tích chúng để có được những giá trị mới.
Nhìn cụ thể hơn 1 chút, các nghiệp vụ liên quan đến mặt hàng của trang thương mại điện tử cơ bản có những loại sự kiện nào?
Một món hàng mới được đưa vào giao dịch, điều chỉnh tăng giá cho sản phẩm A, giảm giá sản phẩm B. User đã mua hết hàng trong kho và sản phẩm C phải đưa về trạng thái hết hàng… Đó còn chưa kể đến các sự kiện liên quan đến khách hàng như User tìm 1 sản phẩm mà không có kết quả, user click vào 1 sản phẩm được recommend trên trang chủ hay việc thanh toán, thêm vào giỏ hàng …
Những sự kiện ấy diễn ra liên tục, rời rạc nhưng lại rất có giá trị để đảm bảo hệ thống cung cấp trải nghiệm tốt nhất cho người dùng. Đứng ở phía Backend, đó không chỉ là đa dạng về mặt dữ liệu, về thời gian đáp ứng mà hơn hết là số lượng sự kiện sẽ rất lớn với những tổ chức, công ty có nhiều khách hàng. Vậy làm sao để quản lý, tổ chức và sử dụng hiệu quả những dữ liệu ấy, làm sao để 1 sự kiện sinh ra được thu thập và xử lý kịp thời?
Hệ thống messaging queue phân tán như Kafka là 1 lựa chọn rất phù hợp cho công việc này.
Kafka Producers
Như trên hình, kiến trúc Kafka bao gồm 3 thành phần chính: Producers, KafkaCluster và Consumers. Thành phần đầu tiên, chịu trách nhiêm thu thập dữ liệu đưa và hệ thống Kafka (publish) là Producers.
Mặc định, Kafka có sẵn console-producer, ta có thể khởi chạy bằng command line và thử việc đẩy dữ liệu vào Kafka. Tuy nhiên, trong các hệ thống thực tế, việc tương tác với hệ thống Kafka sẽ thông qua Producer API hoặc đơn giản hơn là triển khai các ứng dụng như Apache NiFi để thu thập và đẩy dữ liệu vào cụm Kafka. Lúc này Apache NiFi đóng vai trò là Kafka Producers.
Kafka Brokers
Một hệ thống messaging queue phân tán như Kafka thường không cài đơn lẻ. Thực tế khi triển khai cụm Kafka Productions chứa từ vài đến hàng nghìn server cài Kafka và được cấu hình với nhau để thành 1 cụm. Đó gọi là một Kafka Cluster.
Sâu xa hơn 1 chút, những “thứ” chạy trên các server trong cụm là các tiến trình JVM của Kafka, hay còn được gọi là Broker, một Kafka Cluster bao gồm nhiều Brokers.
Dữ liệu nhận được được lưu trữ trên cụm Kafka được lưu trữ ở ổ đĩa mà Broker được cấu hình, sẽ tự động xóa sau 1 khoảng thời gian retention time (mặc đinh là 1 tuần).
Consumers
Để đọc dữ liệu ra phục vụ xử lý, tổng hợp … Kafka cung cấp Kafka Consumer. Tương tự Producer, ta cũng có thể đọc dữ liệu trực tiếp thông qua console-consumer. Kafka Cluster không đẩy dữ liệu cho Consumer, tiến trình Consumer sẽ chủ động lấy dữ liệu từ hệ thống ra (pull) chứ Kafka Cluster không đẩy dữ liệu cho Consumer.
Nếu cấu hình Apache NiFi đọc dữ liệu từ Kafka và đẩy dữ liệu sang 1 hệ thống khác như Hdfs, lúc này NiFi lại đóng vai trò là Kafka Consumer.
Decoupling Produces and Consumers
Kiến trúc ban đầu của Kafka có sự tách biệt rõ ràng giữa phần đẩy dữ liệu (Producers) với phần đọc dữ liệu (Consumers).
Việc này đem lại những lợi ích như sau:
- Nếu Consumer chậm/ lỗi hoàn toàn không ảnh hưởng tới Producers, vì chúng giao tiếp với nhau thông qua Kafka Cluster, lúc này Kafka như 1 “bộ đệm” điều phối hoạt động ở hai phía.
- Tương tự, do đã có bộ đệm, việc thêm 1 vài Consumer cho các nhu cầu mới cũng không ảnh hưởng đến Producers.
- Ngoài ra, nếu Consumer bị lỗi, dữ liệu vẫn an toàn trên Kafka Cluser và sẵn sàng được xử lý tiếp khi khôi phục lại Consumer. Tránh được việc mất mát dữ liệu quan trọng.
Link bài viết gốc tại đây
Bài viết đăng tải lại dưới sự cho phép của tác giả : thầy Nguyễn Chí Thanh là giảng viên khoá Big Data tại Techmaster
Bình luận