Xin chào, lại là mình - Đức Phúc, anh chàng hơn 6 năm trong nghề vẫn nghèo technical nhưng thích viết Blog để chia sẻ kiến thức bản thân học được trong quá trình “cơm áo gạo tiền” đây. Các bạn có thể theo dõi mình thêm qua một số nền tảng bên dưới nhé
- Linkedin: https://www.linkedin.com/in/phuc-ngo-728433346
- Viblo: https://viblo.asia/u/NHDPhucIT
- Patreon: https://www.patreon.com/felix_ngo
- Facebook: https://www.facebook.com/DucPhucIT
Hôm nay, chúng ta sẽ cùng mở đầu series về Kafka cơ bản, mà theo chính chủ mô tả nó như thế này:
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications. (Apache Kafka là một nền tảng truyền sự kiện phân tán mã nguồn mở, được hàng nghìn công ty sử dụng cho các đường dẫn dữ liệu hiệu suất cao, phân tích luồng dữ liệu, tích hợp dữ liệu và các ứng dụng quan trọng.)
Nghe đủ hấp dẫn rồi đúng không nào, bắt đầu thôi
1. Đặt vấn đề
Như chúng ta đã biết, những hệ thống ngày nay đã bao gồm nhiều hệ thống nhỏ bên trong, mà ta có thể chia chúng thành 2 loại cơ bản:
- Hệ thống nguồn (Source System)
- Hệ thống đích (Target System)
Hiển nhiên, dữ liệu sẽ được chuyển từ hệ thống nguồn sang hệ thống đích. Ban đầu, nó cũng sẽ khá đơn giản vì đôi khi chúng ta chỉ cần viết 1 đoạn mã để lấy dữ liệu từ hệ thống này, rồi đưa vào hệ thống kia
Tuy nhiên, khi các dự án, hệ thống phát triển vì yêu cầu nghiệp vụ, ta sẽ phải tích lũy thêm nhiều hệ thống nguồn và nhiều hệ thống đích. Ví dụ, hãy tưởng tượng một dự án có 4 hệ thống nguồn và 4 hệ thống đích. Số lượng các tích hợp cần thiết lúc này sẽ tăng lên theo cấp số nhân, với 16 kết nối riêng biệt cần quản lý.
Với những kết nối như thế này, thách thức đặt ra là gì?
- Sự khác biệt về giao thức: Dữ liệu có thể cần được chuyển qua các giao thức khác nhau như TCP, HTTP, REST, FTP hoặc JDBC.
- Vấn đề về định dạng dữ liệu: Dữ liệu có thể cần xử lý các định dạng khác nhau như CSV, JSON, Avro,…
- Sự thay đổi về cấu trúc/luồng dữ liệu: Khi có 1 cấu trúc hay luồng dữ liệu bị thay đổi, việc đồng bộ các dữ liệu này sẽ khó khăn và tiềm ẩn rủi ro lớn về
- Tải gia tăng trên hệ thống: Mỗi hệ thống nguồn phải xử lý nhiều kết nối và yêu cầu trích xuất dữ liệu, có thể dẫn đến nghẽn cổ chai về hiệu suất (performance bottlenecks).
2. Apache Kafka giải quyết vấn đề như thế nào?
Để giải quyết những thách thức này, Apache Kafka là một giải pháp thay đổi cuộc chơi. Kafka mang lại sự tách biệt trong quá trình tích hợp dữ liệu. Thay vì để các hệ thống nguồn kết nối trực tiếp với các hệ thống đích, Kafka ngồi ở giữa, đóng vai trò là một nền tảng truyền phát dữ liệu (data streaming platform).
Về tổng quan, cách thức hoạt động của Kafka sẽ như thế này:
- Hệ thống nguồn gửi dữ liệu vào Kafka, và Kafka trở thành một trung tâm tập hợp dữ liệu. Các hệ thống nguồn này giờ đây được gọi là Producer
- Hệ thống đích sau đó sẽ "rút" dữ liệu từ Kafka khi cần thiết. Kafka đóng vai trò là trung gian, tách biệt luồng dữ liệu giữa các hệ thống, chúng sẽ được gọi là Consumer
Với Kafka, ta có thể dễ dàng mở rộng hệ thống. Nếu cần thêm nhiều hệ thống nguồn hoặc hệ thống đích, Kafka sẽ xử lý khối lượng công việc tăng lên mà không cần thay đổi đáng kể về kiến trúc hay cơ sở hạ tầng
Kafka làm việc với dữ liệu thời gian thực. Ví dụ, dữ liệu như sự kiện từ trang web, dữ liệu giá cả, tương tác người dùng, và giao dịch tài chính được tạo ra liên tục trong thời gian thực và được truyền tải vào Kafka. Điều này cho phép các ta xử lý và phân tích dữ liệu ngay lập tức
3. Tại sao Kafka lại mạnh mẽ đến thế?
Vậy thì, câu hỏi đặt ra là, tại sao ta nên lựa chọn Kafka? Đâu là lý do khiến nó được dùng nhiều đến vậy
Apache Kafka, ban đầu được tạo ra bởi LinkedIn, đã nhanh chóng trở thành công cụ phổ biến cho việc truyền phát dữ liệu thời gian thực, và hiện nay được duy trì bởi các tổ chức lớn như Confluent, IBM, và Cloudera. Có nhiều lý do khiến Kafka nổi bật như:
- Phân Tán và Khả Năng Chịu Lỗi: Kafka được thiết kế để phân tán (distributed) và chịu lỗi. Điều này có nghĩa là Kafka có thể xử lý các sự cố phần cứng mà không cần dừng hệ thống. Bạn có thể nâng cấp và bảo trì hệ thống Kafka mà không cần phải tắt nó đi.
- Khả Năng Mở Rộng Theo Chiều Ngang: Kafka cho phép bạn mở rộng cơ sở hạ tầng truyền phát dữ liệu theo chiều ngang.
- Khả Năng Xử Lý Message Cao và Độ Trễ Thấp: Kafka có thể xử lý hàng triệu message mỗi giây, rất lý tưởng cho các ứng dụng có lưu lượng cao. Kafka cũng có độ trễ rất thấp, xử lý dữ liệu trong dưới 10 mili giây, điều này làm cho nó rất phù hợp cho các ứng dụng thời gian thực.
4. Kafka trong thực tế
Như đã nói, Kafka hiện đang được sử dụng trong các hệ thống của những công ty siêu lớn như:
- Netflix sử dụng Kafka để cung cấp đề xuất thời gian thực (real-time recommendations). Nó phân tích hoạt động của người dùng để đề xuất các chương trình truyền hình dựa trên thói quen xem.
- Uber sử dụng Kafka để thu thập dữ liệu chuyến đi thời gian thực (real-time trip data). Bằng cách xử lý dữ liệu này, Uber có thể dự đoán nhu cầu và điều chỉnh giá cả một cách linh hoạt dựa trên vị trí và khả năng có sẵn của tài xế.
- LinkedIn sử dụng Kafka để ngăn ngừa spam và cải thiện đề xuất kết nối (connection recommendations) thông qua việc phân tích tương tác của người dùng trong thời gian thực.
Hãy cùng lấy 1 ví dụ gần gũi hơn để bạn dễ hiểu nhé.
Bạn đặt 1 gói hàng, sau đó, gói hàng này được giao cho đơn vị vận chuyển để chuyển đến bạn qua xe tải. Trong quá trình vận chuyển, ứng dụng sẽ cập nhật liên tục vị trí của xe (GPS) mỗi 30 giây để bạn biết rằng gói hàng của mình đã đi đến đâu.
Với yêu cầu dữ liệu được hiển thị liên tục gần như là real-time như vậy, Kafka sẽ rất hữu ích, bởi sẽ có rất nhiều người như bạn đặt hàng, từ đó có rất nhiều gói hàng được vận chuyển đi với thời gian, lộ trình khác nhau ⇒ Dữ liệu gửi lên hệ thống là rất lớn
5. Tổng kết
Như vậy, ở bài viết này, chúng ta đã nắm được tổng quan phần nào về Apache Kafka là gì, cách nó hoạt động cơ bản và lý do tại sao nó lại được sử dụng rộng rãi đến thế. Đừng lo nếu bạn chưa hiểu hết về cách hoạt động hay lợi ích của nó nhé. Xuyên suốt series này, dần dần bạn sẽ nhận ra thôi
Last but not least, cảm ơn bạn đã đọc bài viết này, Hẹn gặp lại bạn trong bài viết tiếp theo nhé
Một lần nữa, đừng quên connect với mình để cùng trao đổi nhé:
- Linkedin: https://www.linkedin.com/in/phuc-ngo-728433346
- Viblo: https://viblo.asia/u/NHDPhucIT
- Patreon: https://www.patreon.com/felix_ngo
- Facebook: https://www.facebook.com/DucPhucIT