0

Bài 1: Kafka là cái gì? Và tại sao "đời" lại cần nó đến thế?

Thử tưởng tượng thế này cho dễ hình dung:

Ông là chủ một quán nhậu cực kỳ đông khách. Bình thường, khách vào gọi món, ông (là Backend) chạy ra ghi order, xong cầm tờ giấy đó chạy thẳng vào bếp (là Database) đưa cho đầu bếp làm.

Lúc quán vắng thì không sao. Nhưng lúc cao điểm, 100 ông khách cùng gào: "Cho đĩa mồi!". Ông chạy đi chạy lại giữa khách và bếp muốn gãy chân. Đầu bếp thì bị ông dí tờ giấy vào mặt liên tục nên nổi cáu, làm sai món, hoặc tệ hơn là... đình công vì quá tải. Kết quả là khách đợi lâu, bỏ về, quán phá sản.

Vấn đề ở đây là gì? Đó là ông đang kết nối "trực tiếp" (Tightly Coupled). Khách và Bếp phụ thuộc hoàn toàn vào tốc độ chạy của ông.

Và đây là lúc Kafka xuất hiện...

Thay vì chạy đi chạy lại, ông đóng một cái bảng ghim (Notice Board) ngay giữa quán.

  1. Khách muốn gì? Cứ ghi giấy rồi ghim lên bảng đó (Producer - Người tạo tin nhắn).
  2. Đầu bếp rảnh tay lúc nào? Cứ ra bảng nhìn, thấy có order mới thì bốc xuống mà làm (Consumer - Người tiêu thụ tin nhắn).

Cái bảng ghim thần thánh đó chính là Kafka.

Tại sao cái "Bảng Ghim" này lại xịn?

  • Không sợ "tẩn" nhau: Khách cứ việc ghim giấy, đầu bếp cứ việc nấu. Hai bên chẳng cần biết mặt nhau, cũng chẳng cần chờ nhau. Nếu đầu bếp nấu chậm? Không sao, giấy cứ nằm yên trên bảng, không mất đi đâu cả.
  • Lưu trữ ký ức: Cái bảng này của Kafka rất đặc biệt. Sau khi đầu bếp lấy giấy xuống nấu xong, tờ giấy đó không bị vứt đi ngay. Nó vẫn nằm đó trong một khoảng thời gian (do ông quy định). Để làm gì? Để lỡ cuối ngày ông muốn thống kê xem hôm nay bán được bao nhiêu đĩa lạc rang, ông chỉ cần ra bảng đọc lại từ đầu là xong.
  • Chia để trị: Nếu quán quá đông, ông sắm... 3 cái bảng ghim. Bảng 1 chuyên đồ uống, bảng 2 chuyên đồ xào, bảng 3 chuyên đồ nướng. Mỗi đầu bếp phụ trách một bảng. Hệ thống chạy vù vù! (Trong Kafka, người ta gọi mấy cái bảng này là Partitions).

Chốt lại, Kafka giúp gì cho dân Dev mình?

Trong thế giới phần mềm, thay vì để Service A gọi thẳng Service B (rồi ngồi đợi phản hồi trong vô vọng), chúng ta ném dữ liệu vào Kafka.

  • Service A (Producer): "Tao vừa có đơn hàng mới nè, tao ném vào Kafka nhé, tao đi làm việc khác đây!"
  • Service B (Consumer): "Ok, khi nào tao rảnh tao sẽ vào Kafka lấy đơn hàng đó về xử lý."

Hệ thống của ông sẽ không bao giờ bị "chết chùm". Một thằng sập, thằng kia vẫn sống nhăn răng vì dữ liệu đã nằm an toàn trong Kafka rồi.

Lời nhắn nhủ cuối bài

Bài 1 nhẹ nhàng thế thôi. Ông chỉ cần nhớ: Kafka là cái bảng trung gian giúp các hệ thống "nói chuyện" với nhau mà không cần đứng mặt đối mặt. Ở bài sau, tôi sẽ dắt ông đi sâu hơn vào cái "bảng ghim" này để xem bên trong nó chia ngăn, chia ô thế nào mà lại thần kỳ đến thế. Chúng ta sẽ nói về Topic và Partition – hay còn gọi là "Nghệ thuật phân loại giấy ghi chú".


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí