Kafka là gì?
Apache Kafka là một kho dữ liệu phân tán được tối ưu hóa để thu nạp và xử lý dữ liệu truyền phát theo thời gian thực. Dữ liệu truyền phát là dữ liệu được tạo ra liên tục từ hàng nghìn nguồn dữ liệu khác nhau, các nguồn này thường gửi các bản ghi dữ liệu đồng thời. Nền tảng truyền phát cần phải xử lý luồng dữ liệu liên tục này và xử lý dữ liệu theo trình tự và tăng dần.
Kafka cung cấp ba chức năng chính cho người dùng:
- Xuất bản và đăng ký các luồng bản ghi
- Lưu trữ hiệu quả các luồng bản ghi theo thứ tự tạo bản ghi
- Xử lý các luồng bản ghi trong thời gian thực
Kafka chủ yếu được dùng để xây dựng các quy trình dữ liệu truyền phát trong thời gian thực và các ứng dụng thích ứng với luồng dữ liệu đó. Kafka kết hợp nhắn tin, lưu trữ và xử lý luồng nhằm hỗ trợ hoạt động lưu trữ, phân tích cả dữ liệu lịch sử lẫn dữ liệu trong thời gian thực.
Kafka dùng để làm gì?
Kafka được sử dụng để xây dựng các quy trình dữ liệu truyền phát trong thời gian thực và các ứng dụng truyền phát trong thời gian thực. Quy trình dữ liệu sẽ xử lý và di chuyển dữ liệu một cách đáng tin cậy từ hệ thống này sang hệ thống khác và ứng dụng tuyến phát là một ứng dụng tiêu thụ các luồng dữ liệu. Ví dụ: nếu bạn muốn tạo một quy trình dữ liệu thu thập dữ liệu hoạt động của người dùng để theo dõi cách mọi người sử dụng trang web của bạn trong thời gian thực, Kafka sẽ được sử dụng để thu thập và lưu trữ dữ liệu truyền phát trong khi phục vụ các lần đọc cho các ứng dụng cấp nguồn cho quy trình dữ liệu. Kafka cũng thường được sử dụng như một trình truyền tải thông điệp, là một nền tảng xử lý và làm trung gian giao tiếp giữa hai ứng dụng.
Kafka hoạt động như thế nào?
Kafka kết hợp hai mô hình nhắn tin, hàng đợi và xuất bản-đăng ký, để cung cấp những lợi ích chính của mỗi mô hình cho người tiêu dùng. Hàng đợi cho phép xử lý dữ liệu được phân phối trên nhiều phiên bản người tiêu dùng, giúp dữ liệu có khả năng mở rộng cao. Tuy nhiên, hàng đợi truyền thống không dành cho nhiều bên đăng ký nhận. Cách tiếp cận xuất bản-đăng ký dành cho nhiều bên đăng ký nhận, nhưng vì mọi tin nhắn đi đến mọi bên đăng ký nhận nên không thể được sử dụng để phân phối công việc trên nhiều quy trình lao động. Kafka sử dụng mô hình bản ghi phân vùng để ghép hai giải pháp này lại với nhau. Bản ghi là một chuỗi các hồ sơ có thứ tự và các bản ghi này được chia thành các phân đoạn, hoặc phân vùng, tương ứng với các bên đăng ký nhận khác nhau. Điều này có nghĩa là có thể có nhiều bên đăng ký nhận cho cùng một chủ đề và mỗi bên được gán một phân vùng để cho phép khả năng điều chỉnh quy mô cao hơn. Cuối cùng, mô hình của Kafka cung cấp khả năng phát lại, cho phép nhiều ứng dụng độc lập đọc từ các luồng dữ liệu hoạt động độc lập với tốc độ riêng của luồng dữ liệu.
Tạo hàng đợi
Xuất bản-Đăng ký
Cách tiếp cận của Kafka mang lại những lợi ích gì?
Có khả năng mở rộng
Mô hình bản ghi phân vùng của Kafka cho phép dữ liệu được phân phối trên nhiều máy chủ, giúp dữ liệu có thể mở rộng vượt quá những gì phù hợp với một máy chủ duy nhất.
Nhanh
Kafka tách các luồng dữ liệu nên có độ trễ rất thấp, làm cho luồng trở nên cực kỳ nhanh.
Độ bền cao
Phân vùng được phân phối và sao chép trên nhiều máy chủ và dữ liệu được ghi vào đĩa. Điều này giúp bảo vệ khỏi lỗi máy chủ, giúp dữ liệu có dung sai rất cao và rất bền.
Kiến trúc của Kafka tích hợp các mô hình khác nhau như thế nào?
Kafka khắc phục hai mô hình khác nhau bằng cách xuất bản hồ sơ cho các chủ đề khác nhau. Mỗi chủ đề có một bản ghi được phân vùng, là bản ghi cam kết có cấu trúc theo dõi tất cả các hồ sơ theo thứ tự và thêm các hồ sơ mới trong thời gian thực. Các phân vùng này được phân phối và sao chép trên nhiều máy chủ, giúp nâng cao khả năng điều chỉnh quy mô, dung sai và tính song song. Mỗi người tiêu dùng được gán một phân vùng trong chủ đề, cho phép nhiều bên đăng ký nhận trong khi vẫn duy trì thứ tự của dữ liệu. Bằng cách kết hợp các mô hình nhắn tin này, Kafka mang lại lợi ích của cả hai. Kafka cũng hoạt động như một hệ thống lưu trữ có khả năng mở rộng và có dung sai cao bằng cách ghi và sao chép tất cả dữ liệu vào đĩa. Theo mặc định, Kafka sẽ giữ dữ liệu được lưu trữ trên đĩa cho đến khi hết dung lượng, nhưng người dùng cũng có thể đặt giới hạn lưu giữ. Kafka có bốn API:
- API nhà sản xuất: được sử dụng để xuất bản một luồng hồ sơ sang chủ đề Kafka.
- API người tiêu dùng: được sử dụng để đăng ký các chủ đề và xử lý luồng hồ sơ của chủ đề.
- API luồng: cho phép các ứng dụng hoạt động như bộ xử lý luồng, nhận luồng đầu vào từ (các) chủ đề và chuyển đổi thành luồng đầu ra đi vào (các) chủ đề đầu ra khác nhau.
- API bộ kết nối: cho phép người dùng tự động hóa liền mạch việc bổ sung một ứng dụng hoặc hệ thống dữ liệu khác vào các chủ đề Kafka hiện tại của họ.
Đâu là sự khác biệt giữa Apache Kafka và RabbitMQ?
RabbitMQ là một trình truyền tải thông điệp mã nguồn mở sử dụng phương pháp tiếp cận hàng đợi nhắn tin. Các hàng đợi được trải rộng trên một cụm các nút và được sao chép tùy chọn, với mỗi tin nhắn chỉ được gửi đến một người tiêu dùng duy nhất.
Đặc điểm |
Apache Kafka |
RabbitMQ |
Kiến trúc |
Kafka sử dụng mô hình bản ghi phân vùng, kết hợp các phương pháp tiếp cận hàng đợi nhắn tin và xuất bản đăng ký. |
RabbitMQ sử dụng hàng đợi nhắn tin. |
Khả năng điều chỉnh quy mô |
Kafka cung cấp khả năng điều chỉnh quy mô bằng cách cho phép phân vùng được phân phối trên các máy chủ khác nhau. |
Tăng số lượng người tiêu dùng vào hàng đợi để tăng quy mô theo phiên bản cho việc xử lý giữa những người tiêu dùng cạnh tranh. |
Lưu giữ tin nhắn |
Dựa trên chính sách, ví dụ: tin nhắn có thể được lưu trữ trong một ngày. Người dùng có thể cấu hình cửa sổ lưu giữ này. |
Dựa trên xác nhận, có nghĩa là tin nhắn sẽ bị xóa khi được tiêu thụ. |
Nhiều người tiêu dùng |
Nhiều người tiêu dùng có thể đăng ký cùng một chủ đề, bởi vì Kafka cho phép cùng một tin nhắn được phát lại trong một khoảng thời gian nhất định. |
Nhiều người tiêu dùng không thể nhận được cùng một tin nhắn, bởi vì tin nhắn sẽ bị xóa khi được tiêu thụ. |
Sao chép |
Các chủ đề được tự động sao chép, nhưng người dùng có thể định cấu hình thủ công để các chủ đề không được sao chép. |
Tin nhắn không được sao chép tự động, nhưng người dùng có thể định cấu hình thủ công để các tin nhắn được sao chép. |
Thứ tự thông điệp |
Mỗi người tiêu dùng nhận thông tin theo thứ tự vì kiến trúc bản ghi được phân vùng. |
Tin nhắn được gửi đến người tiêu dùng theo thứ tự họ đến hàng đợi. Nếu có những người tiêu dùng cạnh tranh, mỗi người tiêu dùng sẽ xử lý một tập hợp con của tin nhắn đó. |
Giao thức |
Kafka sử dụng giao thức nhị phân qua TCP. |
Giao thức hàng đợi nhắn tin nâng cao (AMQP) với sự hỗ trợ thông qua các phần bổ trợ: MQTT, STOMP. |
AWS có thể hỗ trợ các yêu cầu về Kafka như thế nào?
Tìm hiểu thêm về cách triển khai Kafka theo cách thủ công trên AWS tại đây.
AWS cũng cung cấp Amazon MSK, dịch vụ được quản lý hoàn toàn tương thích, khả dụng và an toàn nhất dành cho Apache Kafka, cho phép khách hàng điền vào các hồ dữ liệu, truyền phát các thay đổi đến và từ cơ sở dữ liệu cũng như hỗ trợ các ứng dụng phân tích và máy học. Với Amazon MSK, khách hàng có thể bớt được thời gian quản lý cơ sở hạ tầng và thêm thời gian tạo ứng dụng. Tìm hiểu thêm về Amazon MSK.