Kafka và những câu hỏi

  1. Tôi có nghe nói về Kafka nhưng không rõ nó thực sự là gì…

Kafka là một nền tảng truyền thông điệp (message streaming platform), trong đó có rất nhiều message (hàng trăm ngàn chẳng hạn) được gửi từ producer và sau đó consumer sẽ lấy các message đó một cách liên tục. Ở đây các message thường khá bé, chỉ cỡ vài ngàn byte.

2. Lúc nào thì team/dự án của tôi cần dùng đến Kafka?

  • Khi cần thiết kế một hệ thống publish-subcribe có khả năng mở rộng theo chiều ngang (horizontally scaling).
  • Khi cần một kiến trúc truyền thông điệp thời gian thực nhanh, đáng tin cậy và có thể chịu lỗi cao.

Một số trường hợp cụ thể dùng Kafka có thể kể đến như:

  • Website activity tracking
  • Metric collection and monitoring
  • Log aggregation
  • Real-time analytics
  • Replay message
  • Error recovery

3. Tôi đã biết một số message broker như AWS SQS, Apache ActiveMQ, hay RabbitMQ. Vậy Kafka có gì khác biệt so với các loại kể trên?

Đúng là có khá nhiều các message broker khác nhau và việc lựa chọn broker phù hợp đôi khi khá khó khăn. Chẳng hạn nếu muốn xử lý các message có thời gian tồn tại ngắn thì dùng Redis, với yêu cầu routing phức tạp nhưng lượng message không quá nhiều có thể chọn RabbitMQ, còn chọn Kafka khi số lượng message là rất lớn và đòi hỏi message được lưu lại.

4. Kafka có ưu/nhược điểm gì so với các loại message broker khác?

Nhanh, có khả năng mở rộng chiều ngang.

5. Tôi có một ứng dụng nhỏ (chắc chắn không phải là kiến trúc microservice), thế có nên dùng Kafka không?

Khả năng là không. Kafka thường chỉ dùng khi cần xây dựng một kiến trúc pub-sub với số lượng message nhiều. Một ứng dụng nhỏ không cần thiết dùng kafka vì sẽ thêm phức tạp và thêm độ trễ khi xử lý thông tin.

6. Tôi có rất nhiều dữ liệu nặng cần truyền giữa các thành phần trong ứng dụng chúng tôi đang phát triển, nếu dùng Kafka thì có truyền nổi không?

Message trong Kafka có kích thước nhỏ, tối đa thường chỉ vài ngàn byte, do vậy không phù hợp để truyền tải dữ liệu kích thước lớn. Thay vào đó có thể xem xét chia nhỏ dữ liệu ra để có thể truyền qua Kafka.

7. Chạy Kafka có tốn tài nguyên phần cứng không? Yêu cầu cấu hình server tối thiểu như nào?

Kafka yêu cầu cấu hình phần cứng khá cao.

  • Có một cluster gồm 3 đến 5 node chỉ chạy Zookeeper
  • Ít nhất cluster gồm 3 node chỉ chạy Kafka
  • Ổ cứng của Kafka cluster phải chạy RAID 10
  • Khuyến nghị RAM 4G để chạy broker
  • Có đủ dung lượng và băng thông ổ cứng để chạy được Kafka và Zookeeper
  • Số lượng node phải lớn hơn hoặc bằng replication factor bạn muốn.

8. Kafka đảm bảo không bị mất message như thế nào? Có đáng tin cậy không?

Mặc định Kafka lưu tất cả các message được gửi đi cho đến khi ổ cứng đầy, hơn nữa với cấu hình replication thì message được lưu các bản copy giúp tránh việc mất dữ liệu. Nếu cấu hình Kafka server hợp lý sẽ rất khó xảy ra việc mất mát dữ liệu tuy nhiên Kafka không đảm bảo hoàn toàn việc dữ liệu không bị mất.

9. Các message gửi đi Kafka có nhận được theo đúng thứ tự không?

Kafka lưu giữ messages theo các partitions, trong mỗi partition thì message sẽ được gửi đi đúng thứ tự, tuy nhiên về toàn cục thì không đảm bảo điều này bởi vì một topic có thể lưu message trong nhiều partitions.

10. Tôi không có server để chạy Kafka, cũng không muốn mất tiền mua/thuê server vì chi phí cao và phải cài đặt vận hành phức tạp. Vậy phải làm sao dùng được Kafka?

Có thể thuê dịch vụ cloud. Nếu AWS thì có MSK, còn dùng Google thì có “Apache Kafka® on Confluent Cloud”. Ưu điểm là dễ dàng sử dụng, không cần cài đặt nhiều, luôn luôn sẵn sàng, không phải maintain phần cứng, và cũng dễ tiếp cận cho người mới vào dự án vì có documentation đầy đủ.

Leave a comment