Kafka Fundamental - Bài 1: Giới thiệu Kafka

0 0 0

Người đăng: Đức Phúc

Theo Viblo Asia

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é

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ồnnhiề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)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 spamcả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é:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 546

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

1 1 559

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 2 1k

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 458

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 543

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 461