Bài 1: Bức tranh toàn cảnh - Apache Kafka là gì và tại sao hệ thống lớn lại cần nó?
Để hiểu Kafka là gì, chúng ta không nên đi thẳng vào định nghĩa kỹ thuật vội, mà hãy nhìn vào vấn đề mà nó giải quyết.
1. Vấn đề của các hệ thống truyền thống (Point-to-Point)
Hãy tưởng tượng bạn đang xây dựng một ứng dụng thương mại điện tử. Ban đầu, hệ thống rất đơn giản:
Dịch vụ Đặt hàng (Order Service) gửi trực tiếp thông tin cho Dịch vụ Giao hàng (Shipping Service).
Mọi thứ hoạt động hoàn hảo.
Nhưng khi công ty lớn lên, bạn cần thêm nhiều tính năng mới: Gửi email xác nhận, Tích điểm thưởng, Thống kê doanh thu... Lúc này, Dịch vụ Đặt hàng phải kết nối trực tiếp đến hàng tá dịch vụ khác.
Hậu quả: Hệ thống trở thành một "mớ bòng bong" (Spaghetti Architecture). Nếu một dịch vụ nhận bị sập (ví dụ: Dịch vụ Email chết), Dịch vụ Đặt hàng có thể bị treo theo vì phải chờ đợi. Việc mở rộng và bảo trì trở thành một cơn ác mộng.
2. Sự xuất hiện của Apache Kafka (The Solution)
Để giải quyết bài toán trên, người ta sinh ra khái niệm Message Broker (Người môi giới tin nhắn), và Apache Kafka là một trong những nền tảng mạnh mẽ nhất hiện nay.
Thực chất, Apache Kafka là một hệ thống phân phối luồng sự kiện (Distributed Event Streaming Platform) mã nguồn mở.
Hãy hình dung Kafka như một Bưu điện khổng lồ và siêu tốc:
- Dịch vụ Đặt hàng (người gửi) không cần biết ai sẽ nhận thư. Nó chỉ việc ném hàng ngàn bức thư (thông tin đơn hàng) vào Bưu điện (Kafka) và quay lại làm tiếp việc của mình ngay lập tức.
- Bưu điện (Kafka) sẽ phân loại và lưu trữ các bức thư này một cách an toàn.
- Các dịch vụ khác (Email, Giao hàng, Tích điểm) sẽ đóng vai trò là người nhận. Khi nào rảnh rỗi và sẵn sàng, chúng sẽ tự đến Bưu điện để lấy thư về xử lý.
Kết quả: Các dịch vụ hoàn toàn độc lập với nhau (Decoupling). Dịch vụ Email có sập thì thư vẫn nằm an toàn trong Kafka, chờ khi nào Email sống lại thì đọc tiếp.
3. 5 Thuật ngữ "Nhập môn" bắt buộc phải nhớ
Trong bài 1 này, bạn chỉ cần làm quen với 5 "diễn viên" chính trong thế giới Kafka:
- Message / Event (Tin nhắn / Sự kiện): Chính là cục dữ liệu (bức thư) được truyền đi. Ví dụ:
{"order_id": 123, "amount": 500000}. - Producer (Nhà sản xuất): Ứng dụng/Dịch vụ tạo ra và gửi Message vào Kafka. (Ví dụ: Dịch vụ Đặt hàng).
- Consumer (Người tiêu thụ): Ứng dụng/Dịch vụ đọc và xử lý Message từ Kafka. (Ví dụ: Dịch vụ Giao hàng).
- Broker (Máy chủ trung gian): Một server Kafka duy nhất. Nó làm nhiệm vụ nhận, lưu trữ và phân phối Message. Một hệ thống Kafka thực tế sẽ có nhiều Broker chạy cùng nhau (gọi là Kafka Cluster).
- Topic (Chủ đề): Nơi phân loại Message trong Kafka. Nó giống như "hộp thư" hay "thư mục". Producer gửi thư vào một Topic cụ thể, và Consumer đăng ký theo dõi Topic đó để lấy thư ra. (Ví dụ: Topic tên là
orders_created).
Bạn đã nắm được bức tranh tổng quan về vai trò của Kafka cũng như 5 khái niệm cơ bản này chưa, hay có điểm nào cần mình giải thích rõ hơn trước khi chúng ta bước sang Bài 2 để mổ xẻ sâu hơn về cấu trúc của một "Topic"?
All rights reserved