- vừa được xem lúc

Kafka Fundamental - Bài 2: Topics, Partitions and Offsets

0 0 1

Người đăng: Đức Phúc

Theo Viblo Asia

Xin chào, lại là mình - Đức Phúc, anh chàng hơn 6 năm trong nghề vẫn nghèo technical nhưng thích viết Blog để chia sẻ kiến thức bản thân học được trong quá trình “cơm áo gạo tiền” đây. Các bạn có thể theo dõi mình thêm qua một số nền tảng bên dưới nhé:

Ở bài viết này, chúng ta sẽ đi vào những khái niệm cơ bản đầu tiên trong Kafka gồm

  • Topics
  • Partitions
  • Offsets

Trước tiên, bạn có thể xem hình sau biểu thị 3 khái niệm trên và mối quan hệ giữa chúng nhé. Chúng ta sẽ giải thích dựa trên hình ảnh này

image.png

Nào, cùng nhau phân tích thôi

1. Topic

Thành phần đầu tiên chúng ta nhắc đến sẽ là Topic

Topic là 1 luồng dữ liệu riêng biệt trong Kafka Cluster. Kafka Cluster có thể chứa nhiều Topic. Nó có thể được đặt tên như: Topic A, Topic B, Topic C,…, bất cứ tên gì bạn muốn. Tên Topic cũng chính là key để phân biệt các Topic với nhau.

Chúng ta cũng có thể xem những Topic này như những Table trong Database. Tuy nhiên, với Topic, nó sẽ không có sự ràng buộc về dữ liệu với nhau vì chúng ta có thể gửi bất kì thông tin gì đến Topic mà không cần phải kiểm tra dữ liệu. Dữ liệu đó có thể là JSON, Avro, Text file, Binary,…

Thứ tự những message được gửi vào Topic gọi là Luồng Dữ liệu (Data Stream), đó cũng là lý do vì sao Kafka được gọi là Data Stream Platform.

Điểm khác biệt tiếp theo giữa Topic và Database, là chúng ta không thể truy vấn (query) thông tin bên trong chúng. Thay vào đó, chúng ta có 2 khái niệm khác:

  • Producer: Gửi thông tin vào Topic
  • Consumer: Đọc thông tin từ Topic

Chúng ta sẽ đi sâu vào 2 khái niệm này ở những bài sau nhé

2. Partition

Như vậy ta đã hiểu tổng quan về Topic, vậy Partition thì sao?

image.png

Partition là những phân vùng được chia nhỏ từ Topic. Một Topic có thể chứa số lượng Partition tuỳ ý.

Như hình minh hoạ ở trên, bạn sẽ thấy

  • Topic A được chia thành 4 partitions
  • Topic B được chia thành 3 partitions
  • Topic C được chia thành 2 partitions

Khi gửi message đến Topic, nó sẽ được chuyển đến những phân vùng này một cách ngẫu nhiên trừ khi chúng ta cung cấp cho nó 1 key để nó xác định Partition được gửi đến (chúng ta sẽ thảo luận vấn đề này ở bài sau). Những message này cũng được sắp xếp theo thứ tự cho mỗi Partition.

Kafka Topic có đặc trưng là không thể thay đổi (immutable). Nghĩa là khi dữ liệu đã được gửi đến Partition, nó sẽ không thể thay đổi được nữa (bao gồm cả chỉnh sửa hay xoá dữ liệu). Những dữ liệu này sẽ được lưu giữ trong Kafka một thời gian (chúng ta có thể thiết lập khoảng thời gian này), sau đó, chúng sẽ tự biến mất.

Những message được gửi đến sẽ kèm id của nó, và nó sẽ tăng dần. Đây cũng chính là khái niệm tiếp theo mà chúng ta tìm hiểu: Offset

3. Offset

Okay, hãy nhìn vào những Partition trong Topic C dưới đây image.png

Ta có thể thấy, mỗi Partition có những Offset của chính nó, được đánh dấu tăng dần. Mỗi Offset như vậy sẽ đại diện cho 1 message mà ta gửi đến Partition

Một điều cực kỳ quan trọng cần lưu ý, là những Offset này hoàn toàn riêng biệt cho mỗi Partition. Điều này có nghĩa là Offset i trong Partition C1 sẽ khác với Offset i trong Partition C2 . Nó cũng đồng nghĩa rằng thứ tự Message sẽ có ý nghĩa theo mỗi Partition, chứ không đảm bảo thứ tự giữa các Partition với nhau.

Điều quan trọng tiếp theo là những Offset này sẽ không được tái sử dụng ngay cả khi message trước đó đã bị xoá khỏi nó bởi Kafka, nó sẽ vẫn tiếp tục tăng lên khi có message mới được gửi đến.

4. Tổng kết

Như vậy, ở bài viết này, chúng ta đã nắm được 3 khái niệm cực kỳ quan trọng trong Kafka là: Topics, Partitions và Offsets, cũng như mối quan hệ, đặc trưng của chúng. image.png

Hãy ghi nhớ những nội dung này để chúng ta tiếp tục ở các bài sau nhé. Nó sẽ xuất hiện xuyên suốt series về Kafka này.

Hẹn gặp lại các bạn ở bài viết tiếp theo.

Một lần nữa, đừng quên connect với mình để cùng trao đổi nhé

Bình luận

Bài viết tương tự

- vừa được xem lúc

001: Message-driven programming với Message broker và Apache Kafka

Bài viết nằm trong series Apache Kafka từ zero đến one. . . Asynchronous programming.

0 0 166

- vừa được xem lúc

002: Apache Kafka topic, partition, offset và broker

Bài viết nằm trong series Apache Kafka từ zero đến one. Nói qua về lịch sử, Kafka được phát triển bởi LinkedIn (các anh em dev chắc chẳng xa lạ gì) và viết bằng ngôn ngữ JVM, cụ thể là Java và Scala.

0 0 158

- vừa được xem lúc

003: Gửi và nhận message trong Apache Kafka

Bài viết nằm trong series Apache Kafka từ zero đến one. . . Nếu muốn các message được lưu trên cùng một partition để đảm bảo thứ tự thì làm cách nào.

0 0 226

- vừa được xem lúc

004: Apache Kafka consumer offset, Broker discovery và Zookeeper

Bài viết nằm trong series Apache Kafka từ zero đến one. 1) Consumer offset.

0 0 133

- vừa được xem lúc

Change account

Tài khoản cũ của mình có chút vấn đề nên mình chuyển sang dùng tài khoản mới để viết bài. Xin cảm ơn mọi người.

0 0 33

- vừa được xem lúc

[MSDP] - Event Carried State Transfer

Trong hướng dẫn này, chúng ta cùng tìm hiểu về Microservice Desin Pattern - Event Carried State Transfer (chuyển trạng thái theo sự kiện) để đạt được sự nhất quán về dữ liệu giữa các microservice. Tro

0 0 35