Kafka là gì? Kafka là một trong những nền tảng điều phối message phân tán phổ biến nhất trên thị trường hiện nay. Tuy nhiên, không chỉ dừng lại ở đó, Kafka còn mang lại cho doanh nghiệp của bạn những lợi ích tuyệt vời cả về tính năng lẫn chi phí.

Để hiểu rõ hơn về Kafka là gì cũng như so sánh giữa Kafka và các dịch vụ đẩy message khác trên thị trường, từ đó bạn có thể đưa ra quyết định nên chọn dùng dịch vụ nào, ITviec đã có buổi chia sẻ thông tin đầy bổ ích với anh Lê Nguyên PhongSenior Software Engineer tại Ninja Van.

Tham khảo việc làm tại Ninja Van trên ITviec

apache kafka là gì - lê nguyên phong - ninja van - itviec

Kafka là gì?

Real-time data có giá trị đặc biệt quan trọng đối với các doanh nghiệp. Các doanh nghiệp sử dụng real-time data để cải thiện dịch vụ khách hàng, quản lý sản phẩm và tối ưu hóa vận hành. Ngoài ra, real-time data còn để giúp theo dõi và duy trì cơ sở hạ tầng CNTT. Nhận biết được những lợi ích trên, nhu cầu thu thập real-time data ngày càng tăng cao ở khắp các doanh nghiệp toàn thế giới.

Chính vì thế, những công cụ có khả năng thu thập và lưu trữ dữ liệu thời gian thực ngày càng trở nên được “săn đón”, Kafka chính là một trong những công cụ đó.

Apache Kafka là gì? Các khái niệm/thuật ngữ cần biết khi sử dụng Kafka

apache kafka là gì - định nghĩa - itviec

Kafka, tên gọi đầy đủ là Apache Kafka, là một nền tảng streaming phân tán sự kiện (distributed event streaming), chủ yếu được áp dụng làm hệ thống phân tán, “vận chuyển” tin nhắn và thu thập, xử lý, lưu trữ và phân tích dữ liệu ở quy mô lớn. Kafka trước đây được phát triển bởi LinkedIn, hiện tại thuộc Apache.

Ngôn ngữ chính của Kafka là Java hoặc Scala.

Khi làm việc với Kafka, bạn cần ghi nhớ những khái niệm thường gặp sau:

  • Event Distributed System: Nền tảng phân phối message rộng rãi, không ngắt hệ thống, ra nhiều server, nhiều cluster khác nhau.
  • Topic: Tên đại diện của một kênh cho phép các hệ thống nói chuyện với nhau. Bạn cũng có thể hiểu Topic là tổng hợp của một dãy event tương tự với nhau, gần như một bảng SQL vậy.
  • Event: Một sự kiện, hành động được diễn ra.
  • Stream: Chuyển hóa luồng topic đầu vào thành topic đầu ra.
  • Partition – Phân vùng: Message đưa ra sẽ được Kafka chỉ định hoặc chủ động chỉ định partition để biết message đó “đi đâu về đâu”. Một topic có thể có một hoặc nhiều partition.

Tên gọi của những thành phần trong một hệ thống pub/sub của Kafka:

  • Publisher: Tên gọi chung của những ai có thể publish message lên nền tảng Kafka.
  • Consumer: Consumer là những ai có thể subscribe vào một hoặc nhiều topic cụ thể và nhận message thuộc topic đó từ hệ thống.
  • Broker: Server lưu trữ các topic.
  • Cluster: Nhiều broker cùng làm việc với nhau, tránh single point failure (để toàn bộ broker trên cùng một server sau đó sever đó có vấn đề thì sẽ gặp ảnh hưởng toàn bộ).
  • Connector: Kết nối Kafka với các hệ thống cơ sở dữ liệu khác.

Kafka hoạt động như thế nào?

Để hiểu cách hoạt động của Kafka, bạn có thể tham khảo mô hình dưới đây:

apache kafka là gì - cách kafka hoạt động - itviec

Các tính năng chính của Kafka là gì?

Sau khi đã nắm rõ định nghĩa cơ bản Kafka là gì, bạn có thể sử dụng Kafka cho những mục đích sử dụng nào? Sau đây là 3 tính năng chính của Kafka:

  • Phân phối message:

Cách hoạt động của tính năng này đã được giải thích ở trên.

  • Event Streaming:

Kafka là một hệ thống Event Streaming nên hiển nhiên tính năng chủ yếu của Kafka chính là Event streaming. Event streaming là hành động thu thập dữ liệu dưới dạng các luồng sự kiện trong thời gian thực từ các nguồn sự kiện như cơ sở dữ liệu, cảm biến và thiết bị di động và lưu trữ các luồng sự kiện này một cách lâu dài để truy xuất sau này, phân tích, xử lý chúng trong thời gian thực và định tuyến các luồng sự kiện tới các công nghệ đích khác nhau khi cần thiết.

Nhìn chung, Kafka quản lý một lượng lớn dữ liệu di chuyển từ điểm cuối này sang điểm cuối khác và đảm bảo rằng tất cả dữ liệu đều được phân phối đến đúng nơi, đúng thời điểm. Kafka nhập, lưu trữ và phân tích luồng dữ liệu khi chúng được tạo, ở bất kỳ quy mô nào, từ xử lý dữ liệu thời gian thực đến lập trình luồng dữ liệu.

Ví dụ đối với message, Kafka sẽ stream một message đi nhiều nơi, nhiều topic khác nhau.

  • Lưu trữ dữ liệu:

Kafka lưu trữ message thậm chí sau khi đã gửi đi để phòng tránh mất dữ liệu. Dữ liệu đó có thể được dùng để đọc lại, re-consumed, re-subscribe lại message thoải mái theo nhu cầu.

Ngoài việc lưu trữ messages, Kafka còn được dùng để lưu trữ lượng dữ liệu lớn tạo thành “data lake” hay còn gọi là “data warehouse”. Hơn thế, Kafka không chỉ giúp lưu trữ dữ liệu thụ động mà còn để thu thập và xử lý luồng dữ liệu thời gian thực. Đây cũng là một tính năng mà một hệ thống phân tán message bình thường không có.

Lượng dữ liệu mà Kafka có thể lưu trữ vô cùng khổng lồ. Với tất cả những dữ liệu trong “data warehouse”, các lập trình viên có thể ứng dụng để xây dựng nhiều công nghệ khác nhau, ví dụ như xây dựng mô hình Machine Learning, AI.

Việc làm IT Developer “chất” toàn quốc trên ITviec

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

Nhờ vào khả năng xử lý và lưu trữ dữ liệu lớn theo thời gian thực một cách nhanh chóng và chính xác, Kafka được sử dụng bởi hơn hàng nghìn doanh nghiệp, từ phần mềm máy tính, dịch vụ tài chính, chăm sóc sức khỏe, cho đến công ty nhà nước và giao thông vận tải (theo số liệu từ Apache), bao gồm cả những doanh nghiệp toàn cầu như Grab, Airbnb, Pinterest, agoda,…

Theo đó, anh Phong cũng nhận định rằng Kafka có thể được áp dụng rộng rãi, không bị giới hạn bởi bất kỳ ngành nghề nào. Anh Phong đưa ra cách Ninja Van ứng dụng công nghệ Kafka vào trong quy trình logistic:

“Ninja Van thường xuyên phải xử lý một số lượng đơn hàng khổng lồ đến từ các nền tảng thương mại điện tử (e-commerce), đặc biệt trong các dịp khuyến mãi lớn diễn ra. Chính vì thế, nhờ vào công nghệ Kafka hỗ trợ tốt trong việc xử lý data real time nên mọi bước có thể diễn ra trơn tru, không bị tắc nghẽn.”

Ngoài ra, anh còn đưa ra những cách mà công nghệ Kafka có thể được áp dụng, mang lại lợi ích cho nhiều ngành nghề khác nhau:

“Trong ngành y, bệnh viện có thể dùng công nghệ Kafka trong việc xây dựng các cảm biến theo dõi tình hình bệnh nhân như nhịp tim, huyết áp, thần kinh,… Từ đó, các bác sĩ, y tá theo dõi tình hình bệnh nhân liên tục theo thời gian thực để có thể đưa ra phản hồi kịp thời.

Hoặc như trong ngành quảng cáo, các công ty quảng cáo có thể dùng Kafka lưu trữ những thông tin về hành vi người dùng trên các trình duyệt theo thời gian thực và đưa ra phản hồi, gợi ý quảng cáo thích hợp. Ví dụ như khi bạn vừa tìm kiếm về sản phẩm A thì khi thoát khỏi trình duyệt đó, bạn mở ứng dụng B lên thì lại thấy ngay sản phẩm A được quảng cáo ngay.”

Ưu/nhược điểm của việc sử dụng Kafka là gì?

Kafka có nhiều ưu điểm vượt trội được rất nhiều doanh nghiệp nói chung, developer nói riêng, yêu thích như:

  • High-throughput: Kafka có thể deliver số lượng lớn một cách nhanh chóng, liên tục, hầu như không có thời gian chờ.
  • High-frequency: Kafka có thể cùng lúc xử lý được nhiều message, nhiều thể loại topic, nhiều thể loại message tốt.
  • Scalability (khả năng scale): Công nghệ Kafka thường được do chính team nội bộ dựng, tự quản lý, tự cấu hình theo ý muốn và nhu cầu nên rất dễ scale khi cần thiết.
  • Cộng đồng Kafka lớn, được hỗ trợ nhanh mỗi khi có thắc mắc.
  • Open-source
  • Tự động lưu trữ message trên Kafka, dễ dàng truy lại được.

Đồng thời, theo anh Phong, Kafka cũng có nhiều nhược điểm mà các developer cần lưu ý khi áp dụng:

  • Không có bộ công cụ giám sát hoàn chỉnh: Có khá nhiều tool khác nhau, mỗi một tool lại hỗ trợ một việc quản lý khác nhau cho từng mục đích quản lý, vd như:
    • Kafka tool (offset manager) GUI tool dùng để quản lý topic và consumer
    • Lense: dùng để hỗ trợ việc query message trong Kafka
    • Akhq là toolbox để quản lý Kafka cũng như view data bên trong Kafka
  • Không hỗ trợ chọn topic theo wildcard: Kafka không hỗ trợ việc sử dụng và lựa chọn từng topic theo wildcard mà phải sử dụng chính xác tên topic để xử lý message.
  • Reduces performance – Giảm hiệu suất: Vấn đề xảy ra kích thước message tăng lên, buộc consumer và producer phải compress và decompress message, làm cho bộ nhớ sẽ chậm, dẫn đến ảnh hưởng tới throughput và hiệu suất.
  • Behave clumsy – Xử lý hơi vụng về: Đôi khi do số lượng queues trong Kafka cluster tăng lên nhiều, Kafka thường có hiện tượng xử lý chậm chạp hơn.

Tài liệu Kafka tham khảo

Để hiểu rõ về cách xây dựng một hệ thống Kafka cũng như cách Kafka hoạt động, bạn có thể truy cập vào tài liệu, bài viết, video hướng dẫn tại:

  • Tài liệu chính thức, cơ bản đi từ định nghĩa Kafka là gì và hoàn toàn miễn phí tại trang chủ của Kafka.
  • Bài viết, video hướng dẫn cách xây dựng hệ thống Kafka tại Confluence.

Kafka và Những nền tảng điều phối message phân tán khác

So sánh chung giữa Kafka và AWS SNS

AWS SNS, tên gọi đầy đủ là Simple Notification Service, hay còn hiểu là dịch vụ thông báo đơn giản từ hệ thống đến hệ thống (A2A) và từ hệ thống đến người dùng (A2P) thuộc Amazon.

SNS chỉ có tính năng duy nhất là đẩy thông báo, đẩy tin nhắn. Ứng dụng chính của SNS là dùng để đẩy message đến đối tượng nhận thông báo. Ví dụ như bạn sẽ nhận được thông báo từ ứng dụng trong điện thoại thì có thể ứng dụng đó sử dụng công nghệ SNS để đẩy trực tiếp message từ hệ thống lên điện thoại có app đó.

Ngoài thông báo đẩy từ ứng dụng trên điện thoại, SNS còn cho phép bạn gửi tin nhắn tới người dùng trên quy mô lớn thông qua SMS và email.

Nhìn chung, SNS hoạt động như một kênh giao tiếp đẩy message thuần túy, broadcast ra tất cả những người đang lắng nghe topic đó, ngoài ra không có tính năng nào khác.

Bạn có thể tham khảo thêm thông tin về SNS tại trang chủ của AWS.

amazon sns - itviec

SNS hoạt động theo hai hình thức là standard và freeflow:

  • Standard: Hệ thống sẽ gửi SNS đến tất cả những người đang lắng nghe topic đó, không quan tâm đến trật tự của message.
  • Free-flow: Hệ thống sẽ gửi SNS theo trật tự “first in, first out”. Tuy nhiên, nếu muốn gửi SNS theo hình thức này thì bạn cần đăng ký AWS SQS (Simple Queue Service).

Do được quản lý và vận hành bởi Amazon nên AWS SNS sở hữu nhiều ưu điểm:

  • Không bị giới hạn bởi vật lý, bạn có thể được truy cập vào hệ thống ở bất kỳ ở đâu trên thế giới. Hệ thống không giới hạn bạn phải đặt server phải ở đâu.
  • Được AWS hỗ trợ quản lý.
  • Tích hợp nhiều dịch vụ khác của Amazon: SQS, Kinesis (dịch vụ data streaming tựa như Kafka),… Nếu muốn kết hợp cả dịch vụ pub/sub message và data streaming hoàn chỉnh như Kafka thì AWS có dịch vụ MSK – sẽ được phân tích tiếp theo trong bài viết này.

Tuy nhiên, theo anh Phong, chỉ xét về tính năng đẩy message thì SNS cũng có những nhược điểm như sau:

  • Nếu muốn deliver message nhanh mà có trật tự thì phải sử dụng SQS chi phí cao hơn.
  • Không lưu trữ message. Ví dụ như khi deliver message fail nhưng SNS sẽ không lưu trữ lại để deliver lại, hoặc reuse trong tương lai.
Tham khảo chi phí SNSchi phí SQS.

Sau khi tìm hiểu được Kafka là gì, SNS là gì, tính năng và cách hoạt động của cả hai hệ thống, ắt hẳn bạn sẽ thắc mắc nên sử dụng hệ thống nào cho doanh nghiệp của mình?

Sau đây là bảng so sánh giữa Kafka và SNS dựa trên tính năng gửi message:

  Kafka SNS
Định nghĩa Kafka là gì? Kafka là hệ thống điều phối message phi tập trung (phân tán). SNS là dịch vụ push notif tới các consumer được đăng ký, và rất đa dạng các loại thiết bị cũng như consumer service, không giới hạn ở web server hay email.
Open source Không
Ngôn ngữ hỗ trợ Go, Haskell, PHP, Python, C#, Ruby, NodeJS, Ocaml Java, Python, Ruby, PHP, NodeJS
Lưu trữ message Kafka lưu trữ message vô thời hạn kể cả sau khi đã gửi đi. SNS không lưu lại message sau khi deliver.
Trật tự của message Kafka nhận và gửi message/event theo trật tự. SNS không có chỉ mục cụ thể về trật tự của message/event (trừ khi sử dụng thêm SQS để có thể đảm bảo FIFO của message)
Message/event streaming Message/event streaming là một trong những tính năng chính của Kafka SNS không hỗ trợ khái niệm “message/event streaming”
Giới hạn về message Kafka giới hạn loại consumer. Ngoài ra, Kafka chỉ có một vài thiết bị mới xài được hoặc internal service mới xài được. SNS có nhiều giới hạn về message: TTL (time-to-live), size of message. SNS có thể gửi message đến nhiều quốc gia toàn cầu.
Khả năng mở rộng (Scalability) Vì là open-source nên khi set up hệ thống Kafka đòi hỏi user phải là người tự setup, cấu hình và quản lý, nên việc scale cũng sẽ phải do bản thân người quản lý tính toán, khó có thể được tự động như AWS. SNS được quản lý và vận hành bởi AWS nên khả năng mở rộng sẽ rất cao và tốt, dễ dàng setup cũng như cấu hình, dễ dàng tích hợp với SQS cũng như các dịch vụ khác trong hệ sinh thái AWS.

Tóm tắt lại:

  • SNS chỉ hỗ trợ theo đúng định nghĩa, đơn thuần là việc nhận và đẩy message tới các thiết bị cuối, trong khi đó, Kafka lại hỗ trợ nhiều hơn cho các mục đích dịch vụ đa dạng bao gồm data streaming, message broker system, data pipeline hoặc log aggregator.
  • Khả năng mở rộng của SNS và Kafka tùy thuộc vào nhu cầu sử dụng, nhưng nhìn chung cả 2 đều đáp ứng rất tốt việc mở rộng quy mô hệ thống.

Vậy thì công ty bạn nên sử dụng Kafka hay SNS?

  • Nếu bạn sở hữu đội ngũ developer có kinh nghiệm, mong muốn được tự xây dựng hệ thống để tự quản lý và scale lớn hơn (VD hàng tỉ user events mỗi ngày) thì nên chọn Kafka.
  • Nếu bạn chỉ muốn một hệ thống tối giản để delivery notification, dùng đến đâu trả tiền đến đó và không quan trọng về lưu trữ dữ liệu đó thì chọn sử dụng SNS là tối ưu hơn.

Việc làm IT Developer “chất” ở TP.HCM trên ITviec

Việc làm IT Developer “chất” ở Hà Nội trên ITviec

So sánh chung giữa Kafka và AWS MSK

AWS MSK (tên gọi đầy đủ: Amazon Managed Streaming for Apache Kafka) là dịch vụ streaming chạy Kafka do AWS cung cấp và quản lý. Nói cách khác, AWS MSK giúp doanh nghiệp thu thập và xử lý real-time data bằng Kafka nhưng do AWS hỗ trợ, doanh nghiệp không cần tự xây dựng hệ thống và quản lý.

Vậy thì, khi nhu cầu của doanh nghiệp không chỉ dừng lại ở việc pub/sub message thì bạn nên sử dụng Kafka hay MSK?

  Kafka MSK
Định nghĩa Kafka là gì? Kafka là hệ thống điều phối message phi tập trung (phân tán) và thu thập, xử lý, lưu trữ và phân tích dữ liệu ở quy mô lớn. MSK là dịch vụ của AWS hỗ trợ developer có thể sử dụng Kafka cluster trực tiếp trên AWS mà không cần phải tự setup như on-premise.
Tính năng
  • Phân phối message
  • Data streaming
  • Lưu trữ dữ liệu
Tính năng của MSK tương tự như Kafka khi setup trên on-premise. MSK có lợi thế là được vận hành và quản lý bởi AWS nên user không cần phải lo lắng nhiều về việc phải quản lý các cluster server thụ động mà AWS sẽ hỗ trợ bạn làm việc đó. User chỉ cần cấu hình và sử dụng các dịch vụ trong hệ thống.
Chi phí Miễn phí. Tuy nhiên, khi hệ thống quá lớn, việc thêm cluster vào Kafka sẽ dẫn đến bài toán bảo trì và chi phí vận hành các bare metal cluster cho Kafka.

Chi phí cao hay thấp tùy thuộc theo số lượng cluster mà user mong muốn.

Trade-off cost khi sử dụng MSK có thể sẽ cao hơn so với việc sử dụng Kafka khi các hệ thống không sử dụng nhiều dịch vụ khác của AWS. Mỗi khi cần thêm cluster, user chỉ cần tăng cost để sử dụng, và AWS sẽ lo liệu mọi thứ còn lại.

Quản lý Kafka yêu cầu user phải tự vận hành, bảo trì cũng như setup và config. MSK sẽ được quản lý và vận hành bởi AWS, user chỉ việc config và sử dụng.

Tóm tắt lại:

  • MSK sẽ có lợi thế hơn Kafka thuần về mặt hiệu suất vì các server và cluster do AWS quản lý cũng như vận hành nên sẽ đảm bảo chất lượng của server hơn là on-premise.
  • MSK sẽ tiện lợi cho các công ty đang sử dụng các dịch vụ khác của AWS trong hệ thống của mình.
  • Việc sử dụng MSK hay không tùy thuộc vào nhu cầu của từng công ty tại từng thời điểm cụ thể cũng như yêu cầu cụ thể.

Nhìn chung, Kafka là một hệ thống tuyệt vời dùng để xử lý các khối dữ liệu khổng lồ. Mô hình của Kafka cho phép doanh nghiệp hưởng lợi với nhiều tính năng khác nhau cũng như cho phép consumer xử lý message thoải mái tùy theo nhu cầu.

Sau khi tìm hiểu rõ ràng về Kafka là gì, tính năng của Kafka cũng như các hệ thống khác với tính năng tương tự, các bạn có thể đưa ra quyết định nên sử dụng hệ thống nào tùy thuộc vào nhu cầu, nguồn lực.

Thông tin về anh Lê Nguyên Phong

Hiện nay, anh Lê Nguyên Phong, với hơn 10 năm kinh nghiệm trong ngành CNTT, đang công tác tại Ninja Van với vị trí Senior Software Engineer từ năm 2019.

Trước đó, từ năm 2013, anh Phong đã có 6 năm kinh nghiệm ở vị trí PHP Developer tại nhiều công ty lớn tại Việt Nam như NAVIGOS GROUP VIETNAM JSC, TMA Solution, CA-ADVANCE VIETNAM JSC,…

Anh Phong chuyên nhiều các ngôn ngữ lập trình như PHP, Golang, JavaScript, Python,… và có kinh nghiệm làm việc ở các platform khác nhau như Ecommerce, Logistics, HR Tech, CRM.  

robby-2

Bạn thấy bài viết hay và cần thiết với nhiều người? Đừng ngại nhấn nút Share bên dưới nhé.

Và đừng quên tham khảo việc làm IT trên ITviec!