Why is kafka fast?

- 2 mins

Kafka là một nền tảng theo kiến trúc phân tán cho phép lưu trữ event, xử lý luồng dữ liệu. Một trong những ưu điểm của kafka là đạt được độ trễ thấp khi xử lý message. Để đạt được điều này, kafka sử dụng 2 thiết kế chính là Sequential I/O và Zero Copy Principle. Đây cũng là 2 thiết kế được sử dụng phổ biến trong nhiều nền tảng streaming.

Sequential I/O

Kafka sử dụng phương pháp filesystem để quản lí việc lưu trữ. Đây là nguyên nhân kafka sử dụng sequential I/O thay cho random I/O. Thời gian tìm kiếm của sequential I/O nhanh hơn nhiều ở trên disk. Thiết kế này cho phép appending write only phù hợp với các ứng dụng dạng message queue. Các message được ghi tuần tự, đánh offset bắt đầu từ 0. Consumer có thể lưu trữ lại offset này để truy cập nhằm tiết kiệm thời gian.

Việc áp dụng sequential I/O giúp kafka cung cấp thời gian tìm kiếm message là O(1) ngay cả khi dữ liệu tăng lên hàng TB. Đối với mỗi partition, kafka ghi tuần tự từng message được publish bởi producer vào file log, file mới sẽ được tạo khi file cũ đầy.

Sequential I/O

Zero Copy Principle

Kĩ thuật thứ 2 mà kafka áp dụng là zero copy principle. Đầu tiên ta sẽ tìm hiểu các kafka xử lý dữ liệu nếu không có ZCP.

Kafka without zero copy principle

Ở luồng xử lý trên ta thấy dữ liệu phải được copy 4 lần từ disk đến khi gửi cho consumer. Mỗi lần copy dữ liệu, CPU chuyển trạng thái, lưu trữ trạng thái của các thread để khôi phục hoặc tiếp tục thực thi những lần tiếp theo (context switch). Việc này làm tăng thời gian xử lý, chuyển dữ liệu trong luồng.

Kafka with zero copy principle

Khi áp dụng zero copy principle:

Như vậy thay vì 4 lần copy dữ liệu, bây giờ chỉ cần thực hiện 2 lần copy dữ liệu, ứng dụng không cần phải lấy dữ liệu từ ram rồi gửi vào socket. ZCP đã tiết kiện được bước copy dữ liệu giữa ứng dụng và kernel, thời gian xử lý theo như bytebytego cung cấp giảm xuống khoảng 65%.

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora