0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Tối Ưu Hóa Thời Gian Giao Nhận Tin Nhắn Trong Kafka

Đăng vào 5 ngày trước

• 3 phút đọc

Chủ đề:

apache kafkakafka

1. Mở Đầu

Trong thiết kế kiến trúc hệ thống, thời gian giao nhận tin nhắn (Message Delivery Time) là yếu tố cực kỳ quan trọng mà các kỹ sư cần xem xét. Các công nghệ như Kafka, Redis, Hazelcast, hay Oracle Database đều có những tham số ảnh hưởng trực tiếp đến thời gian này. Hiểu rõ và sử dụng tốt các tham số này sẽ giúp chúng ta tùy chỉnh và tối ưu ứng dụng của mình một cách linh hoạt hơn. Bài viết này sẽ điểm qua các tham số quan trọng trong Kafka và chia sẻ một số tình huống thực tiễn mà mình đã áp dụng để cải thiện hiệu suất cho ứng dụng của mình.

2. Các Tham Số Quan Trọng Ảnh Hưởng Đến Thời Gian Giao Nhận Tin Nhắn

delivery.timeout.ms

Tham số này giới hạn thời gian từ khi một bản ghi (record) đã sẵn sàng để gửi cho đến khi broker phản hồi hoặc client từ bỏ. Thời gian này cần lớn hơn tham số linger.msrequest.timeout.ms; nếu không, sẽ phát sinh lỗi. Khi producer vượt quá thời gian này trong quá trình gửi lại, callback sẽ nhận được exception tương ứng với lỗi từ broker.

max.block.ms

Tham số này kiểm soát thời gian tối đa mà producer có thể bị chặn khi gọi phương thức send() và yêu cầu dữ liệu metadata thông qua partitionsFor(). Nếu vượt quá thời gian này, sẽ truyền ra ngoại lệ timeout.

linger.ms

Tham số này điều chỉnh thời gian mà producer sẽ chờ để thêm tin nhắn vào batch hiện tại trước khi gửi. Nếu thiết lập linger.ms lớn hơn 0, producer sẽ chờ để thêm các thông điệp trước khi gửi, làm tăng độ trễ nhưng cải thiện đáng kể hiệu suất và thông lượng.

request.timeout.ms

Tham số này sử dụng để xác định thời gian mà producer sẽ chờ đợi phản hồi từ server. Nếu không nhận được phản hồi trong thời gian quy định, producer sẽ thử gửi lại hoặc hoàn tất callback với một TimeoutException.

retry.backoff.ms

Khi producer gặp lỗi từ server, lỗi có thể mang tính tạm thời. Tham số này quy định thời gian chờ giữa các lần thử gửi lại. Mình khuyến nghị không sử dụng tham số này một cách tùy tiện mà nên kiểm tra thời gian khôi phục từ lỗi của broker và điều chỉnh delivery.timeout.ms cho hợp lý.

3. Kết Luận

Việc tùy chỉnh các tham số cấu hình này rất quan trọng để tối ưu hóa thời gian gửi tin nhắn trong Kafka. Cần cân bằng giữa độ trễ và hiệu suất gửi tin nhắn sao cho phù hợp với yêu cầu của ứng dụng. Việc theo dõi và điều chỉnh những tham số này theo yêu cầu thực tế giúp giảm thiểu thời gian chờ đợi và nâng cao hiệu suất tổng thể.

Một số tình huống mình đã áp dụng:

  • Điều chỉnh tham số acks cho Kafka server phản hồi nhanh chóng, mình thường sử dụng cấu hình acks=1.
  • Tăng giá trị linger.ms từ 10ms lên 100ms để đo thước đo throughput đến Kafka, từ đó kiểm chứng hiệu quả.

4. Thông Tin Kết Nối

Nếu bạn mong muốn trao đổi thêm về bài viết này, hãy kết nối với mình qua LinkedIn và Facebook:

Rất mong được kết nối và cùng thảo luận!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào