0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Tìm Hiểu Về Kafka: Phân Vùng, Offset và Nhóm Người Tiêu Thụ (Phần 2)

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

• 3 phút đọc

Hellu, lại là mình - Toni Dev đây 😁. Ở Phần 1 trước đây, chúng ta đã cùng nhau khám phá các khái niệm cơ bản trong Apache Kafka. Hôm nay, trong Phần 2 của series Apache Kafka, chúng ta sẽ đi sâu vào ba khái niệm quan trọng: Partition, Offset và Consumer Group.

1. Kafka Partition

  • Giả sử bạn có một topic cần lưu trữ một lượng data quá lớn. Để giải quyết vấn đề này, bạn cần phân chia data và lưu trữ chúng vào các máy chủ khác nhau, mỗi máy chủ được gọi là một partition.
  • Partition thực chất là nơi lưu trữ data trong topic. Một topic có thể có một hoặc nhiều partition. Các ID của partition trong topic sẽ được tăng dần, bắt đầu từ 0. Trong một Kafka Cluster, một partition có thể được sao chép (replicate) ra nhiều bản để đảm bảo tính khả dụng và chịu lỗi.
  • Việc chia nhỏ topic thành các partition thể hiện tính năng phân phối (distributed) của Kafka, cho phép lưu trữ data trên nhiều Data Center (các máy chủ khác nhau).

2. Kafka Offset

  • Trên mỗi partition, dữ liệu được lưu trữ cố định và được gán cho một ID gọi là offset. Giá trị ID của các offset sẽ tăng dần và bắt đầu từ 0. Một partition có thể có một hoặc nhiều offset.

  • Khi một message mới được gửi vào topic, Kafka sẽ quyết định message đó sẽ được lưu trữ trong partition nào và offset nào.

  • Để truy xuất một message trong Apache Kafka, bạn cần chỉ định rõ tên topic, số partition và số offset.

  • Ví dụ, nếu bạn muốn lấy message tại vị trí offset nhất định, bạn có thể chỉ định như sau: topic_name.partition_number.offset_number.

3. Kafka Consumer Group

  • Đặt vấn đề rằng có nhiều producer cùng lúc gửi messages đến một topic. Nếu chỉ có một consumer để subscribe những messages này thì không thể đáp ứng được lưu lượng, vì vậy cần có nhiều consumer hoạt động đồng thời để tránh tình trạng quá tải và độ trễ cao trong hệ thống. Khi có nhiều consumer, bạn nên gom chúng lại thành một consumer group để dễ quản lý và phân chia công việc.

  • Consumer Group là một nhóm chứa các consumer subscribe messages từ các partition khác nhau trong cùng một topic.

  • Cần lưu ý rằng số lượng consumer càng nhiều thì độ trễ càng thấp, tuy nhiên chi phí vận hành sẽ cao hơn. Do đó, cần phải tối ưu hóa chi phí mà vẫn đảm bảo hiệu suất hoạt động của hệ thống.

  • Nhìn vào ví dụ cụ thể, ta thấy:

    • Consumer Group 1 sẽ có độ trễ thấp hơn vì mỗi consumer chỉ subscribe messages từ một partition.
    • Consumer Group 2 sẽ có độ trễ cao hơn vì mỗi consumer phải subscribe messages từ hai partitions.

4. Tóm Tắt

  • Trong bài viết này, mình đã làm rõ hơn các khái niệm về Partition, Offset, và Consumer Group cùng với vai trò riêng của từng khái niệm trong Apache Kafka.
  • Phần 3, mình sẽ hướng dẫn thực hành các bước tạo broker, zookeeper, topic, publish message và subscribe message trên terminal.
  • Cảm ơn các bạn đã dành thời gian đọc đến đây. Nếu bạn có bất kỳ góp ý hay thắc mắc nào, hãy để lại bình luận bên dưới để chúng ta cùng nhau cải thiện nhé! 😁
    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