Kafka là gì? Cơ chế vận hành và cấu trúc dữ liệu của Kafka

ITNavi 14 Apr 2021 21137
Kafka là gì có phải đang là vấn đề khiến bạn băn khoăn lâu nay? Là một lập trình viên mới vào nghề nhưng bạn hoàn toàn mô hồ với các kiến thức về Kafka mà cấp trên giao phó. Vậy thì không nên bỏ qua những kiến thức mà ITNavi chia sẻ dưới đây. Những thông tin này chắc chắn sẽ giúp ích cho bạn trong quá trình làm việc và học tập. 

Kafka là gì?

Các chuyên gia đã đưa ra 2 đáp án cho câu hỏi Kafka là gì như sau

Apache Kafka là gì?

Kafka Apache được định nghĩa là một message broker chạy trên hệ thống phân tán. Kafka được phát triển và bảo trì bởi tổ chức có tên là Apache nên còn được gọi với cái tên khác là Apache Kafka.  Bên public dữ liệu sẽ gọi Kafka là producer và bên subcribe khi nhận dữ liệu theo topic thì sẽ gọi là consumer.  Kafka có khả năng truyền tải đi một lượng lớn message trong khoảng thời gian thực. Nếu như bên nhận chưa nhận được thì massage sẽ tự động lưu trữ vào hàng đợi và trên ổ đĩa. Đồng thời, nó còn được replicate trong cluster để phòng ngừa việc mất đi dữ liệu.  Kafka là message broker chạy trên hệ thống phân tán

Kafka là message broker chạy trên hệ thống phân tán

Kafka stream là gì?

Kafka là một nền tảng streaming phân tán, có khả năng mở rộng và là một loại sản phẩm mã nguồn mở. Ban đầu, dự án này được phát triển bởi Linkedin và giờ trở thành dự án Apache dạng mã nguồn mở trong năm 2011.  Kafka Stream được viết bằng 2 loại ngôn ngữ là Scala và Java. Nó được viết ra với mục đích cung cấp nền tảng với độ trễ thấp kèm thông lượng cao nhằm xử lý dễ dàng hơn các nguồn cấp dữ liệu dựa vào thời gian thực. 

Cách hoạt động của Kafka là gì?

Kafka được xây dựng dựa vào mô hình subcribe/publish nên tương tự với hệ thống message nào khác.  Những ứng dụng gửi message tới node kafka và thông báo chúng sẽ được xử lý bởi các ứng dụng được gọi là consumers.  Khi những messages này gửi tới kafka node thì chúng đều được lưu trữ tại nơi gọi là topic. Sau đó, consumer hoàn toàn có thể subcribe đến topic và lắng nghe các messages. Khi đó, messages có thể là thông tin bất kỳ như: giá trị cảm biến, hành động của người dùng,... Còn topic sẽ được xem là tên danh mục mà những message được lưu trữ rồi đẩy vào.  Đa phần topics trong Kafka có kích cỡ rất lớn vì vậy, bạn không nên lưu trữ toàn bộ dữ liệu của topic vào ở trên một node. Nguồn dữ liệu này nên phân chia rõ ràng thành nhiều Partitions sẽ cho phép bạn thực hiện subcribe song song với topic cụ thể bằng biện pháp phân chia dữ liệu có trong một topic cụ thể Mỗi một Partition đều sẽ được đặt trên máy riêng biệt và cho phép nhiều consumer có thể đọc dữ liệu từ một topic diễn ra song song.  Ngoài ra, để gia tăng sự khả dụng của partition thì mỗi partition đều sở hữu giá trị replicas của riêng nó. 

Các khái niệm cần nắm rõ để hiểu rõ hơn Message Broker của Kafka

Để hiểu rõ được khái niệm Apache Kafka là gì, bạn đọc nên tham khảo những khái niệm sau để làm rõ. 
  • Producer: Kafka sẽ thực hiện phân loại, lưu message dựa theo topic sử dụng producer để thực hiện publish message vào các topic. Khi đó, dữ liệu sẽ được gửi đến partition của topic được lưu trữ trên Broker. 
  • Consumer:  Các dữ liệu khi được truyền vào trong Kafka dựa theo topic ngay khi cần truyền dữ liệu cho các ứng dụng khác nhau. Khi đó, sẽ tạo ra những topic khác nhau. 
Các nội dung trong Kafka

Các nội dung trong Kafka

  • Partition: Vị trí này là nơi dữ liệu xuất hiện dành cho một topic đã được lưu trữ. Topic thường sẽ bao gồm 1 hoặc nhiều partition. Khi đó, ở mỗi partition thì dữ liệu sẽ được lưu trữ một cách cố định và được gán cho một ID gọi là offset. Với một Kafka cluster thì một partition thường có thể sao chép ra nhiều bản khác nhau. Trong số đó, bản leader sẽ có nhiệm vụ đọc dữ liệu và những bản còn lại được gọi là follower. Nếu như bản leader này bị lỗi thì bản follower còn lại sẽ được làm leader thay thế. Trường hợp nếu như bạn muốn dùng nhiều consumer song song dữ liệu của một topic thì topic này buộc phải có nhiều partition. 
  • Broker: Kafka cluster được em là một set server và mỗi set này được gọi là 1 broker. 
  • Zookeeper: Được sử dụng để bố trí cung như quản lý lại các broker. 
Bạn đọc tham khảo thêm: Redux là gì? Tổng quan về Redux Reactjs cho người mới bắt đầu

Tại sao bạn nên sử dụng Apache Kafka ngay hôm nay? 

Bởi vì là dự án opensource nên Kafka đã được đóng gói rất hoàn chỉnh và có khả năng chịu lỗi vô cùng cao. Vì vậy, hiệu năng làm việc của Kafka rất tốt và có thể mở rộng dễ dàng nó mà không cần dừng hệ thống lại.  Hiện nay, Kafka được sử dụng nhiều vì sở hữu các use case sau: 
  • Kafka được dùng như một hệ thống message queue dùng để thay thế cho ActiveMQ hoặc RabbitMQ. 
  • Hỗ trợ theo dõi hoạt động của website (website activity monitoring). 
  • Stream Processing: Kafka là loại hệ thống thích hợp cho quá trình xử lý cho các dòng dữ liệu dựa theo thời gian thực. Nếu như dữ liệu của topic được bạn thêm mới vào sẽ được ghi ngay vào hệ thống và truyền tải đến cho bên nhận. Ngoài ra, Kafa còn là hệ thống có đặc tính duribility dữ liệu nên sẽ được lưu trữ an toàn cho đến khi bên nhận sẵn sàng nhận. 
  • Tổng hợp log (Log Aggregation). 
  • Thu thập các dữ liệu, tracking hành động của các người dùng (bao gồm page view, search action của user) rồi publish vào một topic rồi được xử lý khi cần thiết. 
  • Event - Sourcing: Lưu lại những trạng thái của hệ thống rồi thực hiện tái hiện lại trong trường hợp system bị down. 

Nên bắt đầu với Apache Kafka như thế nào?

Apache Kafka được phát triển thông qua Java nên quá trình triển khai đều được quản lý chặt chẽ bởi Apache ZooKeeper.  Bất kỳ HĐH nào nếu như có khả năng chạy JVM đều có thể sử dụng để có thể triển khai cụm Apache Kafka. Với người dùng không muốn đối phó với cơ sở hạ tầng thì nên bắt đầu từ dịch vụ Apache Kafka đã được quản lý trên đám mây. Khi đó, IBM Bluemix sẽ có Message Hub và xuất hiện dịch vụ tin nhắn dựa vào đám mây được quản lý dựa vào Apache Kafka.  Hướng dẫn làm việc với Kafka

Hướng dẫn làm việc với Kafka

Cloud Karafka là loại nền tảng phát trực tuyến khác nhau trong các đám mây công cộng và được thiết kế khối lượng công việc riêng cho Apache Kafka.  Aiven.io đã cung cấp Apache Kafka được lưu trữ cùng với InfluxDB, Elasticsearch, Grafana. Vì thế, nếu bạn là nhà phát triển Salesforce. com hoặc Heroku hiện có thì bạn hoàn toàn có thể tận dụng Apache Kafka ngay trên Heroku. 

Ứng dụng của Kafka là gì?

Dưới đây là một số áp dụng hay ứng dụng phổ biến của Kafka mà ai cũng nên biết. 

Stream processing

Bài toán này yêu cầu người dùng phải phân tích luồng dữ liệu bởi tốc độ cao. Nếu bạn muốn phân tích hành vi và xem sản phẩm của người dùng trên web thì cần phải ghi lại dưới dạng dữ liệu thô đơn giản như: click chuột, đơn hàng. 

Hệ thống IoT

Hiện nay, Internet of Things đã cho phép thiết bị có thể gửi những dữ liệu thu thập được vào hệ thống máy chủ. Vì vậy, bạn có thể sử dụng Kafka để nhận các dữ liệu này thay cho việc tự phát triển API. Thông thường, dữ liệu thu thập bởi thiết bị có thể là Big data với tần suất gửi đi lớn nên bạn cần yêu cầu xử lý cũng như đáp ứng trong real-time. 

Phân tích sự kiện và log

In Log trong quá trình hệ thống đang chạy đặc biệt quan trọng cho quá trình bảo trì. Nếu người dùng có nhu cầu phân tích các log  thì nên đẩy dữ liệu log và Kafka. 

Thực hiện chuyển đổi ngôn ngữ lập trình

Ứng dụng này áp dụng cho các nhu cầu chuyển đổi ngôn ngữ lập trình cấp thấp sang cấp cao. Giải pháp về share memory không thể giúp bạn tích hợp 2 ngôn ngữ lập trình lại với nhau. Vì vậy, giải pháp cho trường hợp này là đẩy kết quả dữ liệu của chương trình viết vào Kafka. Sau đó, sử dụng chương trình muốn chuyển đổi để lắng nghe topic rồi lấy ra dữ liệu tương ứng để phân tích và xử lý.  Ứng dụng của Kafka

Ứng dụng của Kafka

Hướng dẫn dùng Kafka khi lập trình

Dưới đây là các dùng Kafka vắn tắt mà bạn có thể tham khảo và tiếp cận. 
  • Thực hiện cài đặt Zookeeper và Kafka vào máy. Khi đó, Kafka server sẽ chạy tại một địa chỉ nhất định. 
  • Cấu hình file config của Kafka sẽ làm việc tùy theo yêu cầu. 
  • Muốn gửi message lên Kafka với chương trình có vai trò là producer thì bạn nên tích hợp thư viện Kafka vào (việc tích hợp này cần dựa theo ngôn ngữ mà bạn đang lập trình). 
  • Với chương trình có vai trò consumer, bạn cần tích hợp Kafka client sao cho phù hợp với ngôn ngữ lập trình mà bạn đang viết. Cách này sẽ giúp kết nối đến địa chỉ mà Kafka server đang chạy hoặc truy vấn theo chủ đề. 
Trên đây là toàn bộ những thông tin liên quan đến Kafka mà ITNavi muốn gửi đến bạn đọc. Hy vọng, từ kiến thức trên bạn đọc không những hiểu rõ Kafka là gì mà còn áp dụng thuần thục nó vào trong chương trình làm việc của bản thân.
ITNavi - Nền tảng kết nối việc làm IT

Nguồn: Kafka là gì? Cơ chế vận hành và cấu trúc dữ liệu của Kafka

Bài viết liên quan

NEWSLETTER

Nhập địa chỉ email của bạn dưới đây để đăng ký nhận tin mới nhất

KẾT NỐI VÀ THEO DÕI