Nếu bạn mới tìm hiểu về Kafka bạn sẽ thấy nhiều điều khá lạ, vì Confluent định nghĩa Kafka là một nền tảng stream, nhiều bài viết khác cũng đi theo định hướng này; còn nhiều bài viết khác lại nói về Kafka là một message broker. Vậy, Tino Group sẽ giúp bạn hiểu hơn về Kafka là gì, Apache Kafka là gì và cả Kafka streaming nhé!
Kafka là gì?
Apache Kafka là gì?
Apache Kafka là một hệ thống phân tán message – distributed messaging system, Kafka được phát triển và duy trì bởi Apache, vì thế Kafka (message broker) có tên là Apache Kafka.
Giống như những chương trình/ phần mềm message broker khác, Kafka được phát triển theo mô hình public/subscribe. Bên public dữ liệu được gọi là producer và bên nhận dữ liệu theo các topic sẽ được gọi là consumer.
Bạn có thể tìm hiểu thêm về message broker và các từ tiếng Anh được giữ nguyên trong bài viết Kafka tại đây.
Kafka stream là gì?
Kafka stream là một nền tảng streaming phân tán sự kiện – distributed event streaming platform. Được phát triển dựa trên nền tảng Apache Kafka distributed messaging system bởi Linkedin vào năm 2011, sau đó trở thành dự án mã nguồn mở của Apache. Cho đến thời điểm hiện tại, Apache Kafka được phân phối chính thức và đầy đủ nhất bởi Confluent thông qua Confluent Platform.
Nền tảng Kafka stream được viết bởi ngôn ngữ Scala và Java nhằm mục đích cung cấp dịch vụ xử lý sự kiện dựa trên thời gian thực với độ trễ thấp và thông lượng cao. Vì thế, Kafka được hơn 80% doanh nghiệp trong top 100 của Fortune tin dùng.
Bài viết sẽ đi theo hướng Kafka stream được sử dụng thông dụng trong thời điểm hiện tại.
Kafka được sử dụng để làm gì?
Kafka là một kho dữ liệu phân tán được tối ưu hóa để xử lý dữ liệu theo thời gian thực. Nếu là một nền tảng streaming trực tuyến sẽ cần phải xử lý dữ liệu một cách liên tục và tuần tự tăng dần. Sau đây sẽ là 3 chức năng chính Kafka sẽ cung cấp cho người dùng:
- Publish và subscribe các stream của record (luồng dữ liệu).
- Khả năng lưu trữ các stream of record một cách hiệu theo thứ tự các record được tạo.
- Khả năng xử lý stream of record theo thời gian thực
Vì sao nên sử dụng Kafka?
Vì Kafka là một dự án mã nguồn mở được đóng gói hoàn chỉnh, với hiệu năng tốt, dễ dàng mở rộng mà không cần phải tạm dừng hệ thống cùng với đó là khả năng chịu lỗi cao.
Nếu bạn đang xây dựng một phần mềm, một trang web hiển thị thông tin cho người dùng theo thời gian thực, Kafka chính là một lựa chọn tối ưu. Bạn có thể sử dụng Kafka để nhập và lưu trữ dữ liệu trong quá trình phát trực tiếp; bạn cũng có thể sử dụng như một phần mềm message broker giúp 2 ứng dụng/ nền tảng có thể giao tiếp với nhau.
Những lợi ích khiến bạn cân nhắc về việc sử dụng Kafka:
- Khả năng mở rộng: mô hình phân vùng nhật ký của Kafka cho phép dữ liệu của bạn có thể phân phối trên nhiều máy chủ và giúp bạn có thể mở rộng máy chủ mở rộng khi không còn phù hợp.
- Nhanh: Với cách xử lý tách các luồng dữ liệu, vì thế độ trễ rất thấp làm cho tốc độ trở nên nhanh hơn.
- Khả năng chịu lỗi và độ bền: Các gói dữ liệu của bạn có thể được sao chép và phân phối trên nhiều server khác nhau. Vì thế, khi có một sự cố xảy ra, dữ liệu của bạn ít bị lỗi hơn và bền hơn.
Kafka hoạt động như thế nào?
Kafka sử dụng kết hợp 2 mô hình chính là queuing và publish-subscribe nhằm cung cấp lợi ích tốt nhất cho người dùng.
Queuing cho phép dữ liệu có thể được xử lý phân tán trên nhiều consumer và tạo ra khả năng mở rộng cao.
Publish-subscribe sẽ tiếp cận cùng lúc nhiều subscribe và các message sẽ được gửi đến nhiều subscribe, không thể sử dụng để phân tán công việc cho nhiều worker.
Các khái niệm cần nắm khi tìm hiểu về Kafka
Producer
Trước khi xử lý, Kafka sẽ thực hiện phân loại và lưu trữ các message dựa theo topic của chúng. Producer có nhiệm vụ publish message vào các topic thích hợp. Sau đó, khi dữ liệu được gửi đến partition của topic được lưu trữ tại Broker.
Consumer
Các consumer sẽ được định danh theo từng group name, nhiều consumer có thể cùng nằm trong một topic.
Partition
Partition là nơi lưu trữ dữ liệu cho các topic, mỗi topic có thể có một hoặc nhiều Partition khác nhau. Mỗi Partition sẽ được gán một ID và lưu trữ dữ liệu có định.
Trong 1 Kafka cluster, một Partition có thể được sao chép thành nhiều bản và có một bản chính leader chịu trách nhiệm đọc ghi dữ liệu; các bản còn lại sẽ có tên là follower. Khi bản chính bị lỗi,sẽ có một bản follower lên thay thế thành leader.
Broker
Kafka cluster là một nhóm các server và mỗi nhóm server này sẽ được gọi là broker.
Zookeeper
Zookeeper là một chức năng nhằm để quản lý và bố trí lại các broker.
Một số Use Case Kafka tiêu biểu
Sử dụng như một message broker
Bạn có thể sử dụng Kafka để thay thế cho các Message broker như ActiveMQ hoặc RabbitMQ.
Website Activity Tracking
Đây là một cách thức truyền thống để sử dụng Kafka, bạn có thể sử dụng để xây dựng website và đăng tải nội dung theo thời gian thực. Tất cả các dữ liệu như: lượt xem trang, hoạt động tìm kiếm và bất cứ một hoạt động nào khác trên trang của bạn đều sẽ được tạo thành các topic. Hoạt động theo dõi website này sẽ giúp bạn có thể phân tích được hành vi người dùng trên trang và thu hút nhiều người đọc hơn.
Đo lường
Bạn có thể sử dụng Kafka để xây dựng dữ liệu giám sát các hoạt động. Đồng nghĩa với việc bạn đang tập hợp số liệu thống kê từ các nguồn phân tán trên trang nhằm tạo ra một nguồn dữ liệu tổng hợp.
Sử dụng để tạo Log
Tổng hợp log hay nhật ký hoạt động, đây là phương pháp nhiều người sử dụng Kafka nhằm để tóm tắt các chi tiết và cung cấp bản ghi rõ ràng về dữ liệu sự kiện nhằm để xử lý về sau.
Stream Processing
Đây là cách sử dụng phổ biến nhất ở thời điểm hiện tại của Kafka, là một hệ thống được phát triển để thích hợp với việc xử lý dữ liệu trong thời gian thực. Mỗi khi dữ liệu được thêm mới vào topic sẽ ngay lập tức được ghi vào hệ thống và truyền đến cho bên nhận dữ liệu. Với thư viện Kafka Streams được tích hợp từ phiên bản 0.10.0.0 có khả năng xử lý stream nhẹ nhưng vô cùng mạnh mẽ.
Ngoài ra, bạn cũng có thể sử dụng các công cụ mã nguồn mở khác như: Apache Storm và Apache Samza để xử lý.
Tổng kết lại, Tino Group đã giúp bạn hiểu được về Kafka là gì cũng như bạn cũng đã có thể thấy rằng Kafka rất đáng để sử dụng. Cuối cùng, Tino Group chúc bạn gặt hái được nhiều thành công trong việc lập trình!
Bài viết có tham khảo tại: Kafka Use Cases, APACHE Kafka.
Những câu hỏi thường gặp về Kafka
Cách triển khai một Kafka đơn giản như thế nào?
Để triển khai một Kafka đơn giản, trước tiên, bạn cần tài bộ cài đặt Kafka mới nhất về tại đây. Để quá trình triển khai một cách thuận lợi hơn, bạn có thể tham khảo video và bài viết Apache Kafka Quickstart nhé!
Tài liệu tìm hiểu sâu Kafka ở đâu?
Để tìm hiểu và khai thác Kafka hiệu quả hơn, bạn có thể xem bộ tài liệu hướng dẫn chính thức của Kafka tại đây, không chỉ hướng dẫn bạn các khái niệm cơ bản. Kafka sẽ giới thiệu cho bạn nhiều hơn về các API, cách kết nối, thiết kế, cách vận hành và bảo mật Kafka rất đơn giản dễ hiểu. Điều kiện để học tối ưu nhất là bạn phải biết tiếng Anh.
RabbitMQ là gì?
RabbitMQ là một chương trình message broker mã nguồn mở giống với Kafka. Tuy nhiên, khác với Kafka, mỗi message của RabbitMQ chỉ đi đến duy nhất một consumer.
Apache Software Foundation là gì?
Apache Software Foundation là một tổ chức phát triển phần mềm mã nguồn mở và phi lợi nhuận lớn nhất thế giới với hơn 350 dự án mã nguồn mở. Nếu bạn thích thú với Apache Software Foundation, bạn có thể tìm hiểu thêm về tổ chức này tại đây.