1. Câu hỏi cơ bản về Apache Kafka
1.1 Kafka là gì? Mô tả kiến trúc của Kafka?
Kafka là một nền tảng phân tán dùng để quản lý và truyền tải dữ liệu dưới dạng luồng sự kiện theo thời gian thực. Bạn có thể mô tả các thành phần chính như producer, consumer, broker, topic, partition và zookeeper.
1.2 Kafka hoạt động như thế nào?
Kafka lưu trữ dữ liệu dưới dạng log phân tán. Producers gửi tin nhắn vào topic và các consumers đọc tin nhắn từ topic theo thứ tự.
1.3 Kafka Topic là gì?
Topic là một kênh dùng để lưu trữ và phân loại các tin nhắn. Một topic có thể được chia thành nhiều phân vùng (partition) để hỗ trợ phân phối dữ liệu song song.
1.4 Kafka Partition là gì?
Partition là một phần của topic nơi lưu trữ các tin nhắn theo thứ tự. Partition giúp Kafka mở rộng quy mô theo chiều ngang tăng khả năng xử lý song song.
1.5 Kafka Producer là gì?
Producer là các thành phần gửi tin nhắn vào Kafka. Producers có thể gửi dữ liệu vào một hoặc nhiều topic.
1.6 Kafka Consumer là gì?
Consumer là thành phần nhận tin nhắn từ các topic và xử lý chúng. Consumers có thể làm việc đơn lẻ hoặc theo nhóm (Consumer Group).
1.7 Consumer Group là gì?
Consumer Group là một tập hợp các consumers cùng tiêu thụ tin nhắn từ một topic. Mỗi phân vùng của topic chỉ được tiêu thụ bởi một consumer duy nhất trong nhóm, đảm bảo rằng mỗi tin nhắn chỉ được xử lý một lần.
1.8 Kafka Broker là gì?
Broker là các node trong cụm Kafka chịu trách nhiệm lưu trữ dữ liệu và xử lý yêu cầu từ producers và consumers.
1.9 Kafka Zookeeper là gì?
Zookeeper quản lý metadata của cụm Kafka giúp theo dõi trạng thái của brokers, phân phối leader cho các phân vùng và duy trì cấu hình cụm.
1.10 Lợi ích chính của việc sử dụng Apache Kafka là gì?
- Khả năng xử lý dữ liệu theo thời gian thực.
- Hỗ trợ mở rộng quy mô dễ dàng.
- Độ tin cậy cao với cơ chế replication và partition.
- Lưu trữ dữ liệu bền vững, giúp có thể đọc lại tin nhắn cũ.
2. Câu hỏi nâng cao về Apache Kafka
2.1 Kafka sử dụng mô hình lưu trữ tin nhắn nào?
Kafka sử dụng mô hình log-based để lưu trữ tin nhắn. Mỗi topic có nhiều phân vùng và tin nhắn được ghi theo thứ tự vào log của phân vùng.
2.2 Replication trong Kafka hoạt động như thế nào?
Mỗi phân vùng của topic có thể được nhân bản (replicate) trên nhiều brokers. Mỗi phân vùng có một leader quản lý việc ghi dữ liệu và nhiều followers sao chép dữ liệu từ leader. Nếu leader gặp sự cố thì một follower sẽ trở thành leader mới.
2.3 Offset trong Kafka là gì?
Offset là số thứ tự duy nhất xác định vị trí của mỗi tin nhắn trong phân vùng. Consumers theo dõi offset để biết được họ đã xử lý đến tin nhắn nào.
2.4 Kafka hỗ trợ cơ chế lưu trữ bền vững như thế nào?
Kafka lưu trữ tin nhắn trong các phân vùng trên đĩa cứng. Các tin nhắn được lưu trữ trong một khoảng thời gian cấu hình (retention period) hoặc cho đến khi dung lượng đạt ngưỡng.
2.5 Làm thế nào để Kafka bảo đảm độ tin cậy của tin nhắn?
Kafka sử dụng cơ chế replication để bảo đảm an toàn cho dữ liệu. Khi một producer gửi tin nhắn, nó có thể yêu cầu Kafka gửi acknowledgement từ các brokers để xác nhận rằng tin nhắn đã được sao lưu trên nhiều bản sao.
2.6 Kafka hỗ trợ Exactly Once Semantics (EOS) như thế nào?
Kafka cung cấp khả năng Exactly Once Semantics cho phép tin nhắn chỉ được xử lý một lần duy nhất, ngay cả trong trường hợp xảy ra lỗi. Điều này đặc biệt quan trọng trong các hệ thống yêu cầu tính nhất quán cao.
2.7 So sánh Kafka với các message broker khác như RabbitMQ?
Kafka có thông lượng cao hơn, lưu trữ tin nhắn lâu dài theo mô hình log-based và phù hợp với các ứng dụng xử lý dữ liệu lớn, trong khi RabbitMQ có độ trễ thấp hơn và phù hợp hơn cho các hệ thống cần định tuyến tin nhắn phức tạp.
2.8 Leader Election trong Kafka là gì?
Leader Election là quá trình chọn một broker làm leader cho một phân vùng. Leader chịu trách nhiệm xử lý yêu cầu ghi/đọc cho phân vùng đó và nếu leader gặp sự cố, Kafka sẽ tự động chọn một follower khác làm leader mới.
2.9 Kafka Stream là gì?
Kafka Streams là một thư viện xử lý luồng dữ liệu trực tiếp từ Kafka. Nó giúp xử lý, phân tích và biến đổi luồng sự kiện trong thời gian thực mà không cần sử dụng hệ thống bên ngoài.
2.10 Eventual Consistency trong Kafka là gì?
Eventual Consistency là nguyên tắc bảo đảm rằng dữ liệu trong hệ thống phân tán cuối cùng sẽ nhất quán, mặc dù có thể không nhất quán ngay lập tức do sự đồng bộ hóa giữa các bản sao (replica) trên các broker.
3. Câu hỏi về hiệu năng và tối ưu hóa Kafka
3.1 Làm thế nào để Kafka có thể đạt được thông lượng cao như vậy?
Kafka sử dụng cơ chế batching để gửi và nhận tin nhắn theo lô, tối ưu hóa I/O và giảm chi phí xử lý. Ngoài ra, phân vùng và lưu trữ tuần tự giúp tăng cường hiệu suất.
3.2 Cơ chế nén trong Kafka hoạt động như thế nào?
Kafka hỗ trợ nén tin nhắn bằng các thuật toán như GZIP, Snappy và LZ4 để giảm kích thước tin nhắn và cải thiện hiệu suất mạng.
3.3 Làm thế nào để tối ưu hóa hiệu suất của Kafka?
Một số cách bao gồm:
- Tăng kích thước phân vùng (partitions) để tăng tính song song.
- Sử dụng nén tin nhắn.
- Cấu hình retention hợp lý.
- Tối ưu hóa thông số batch và buffer cho producers và consumers.
3.4 Độ trễ trong Kafka có thể xảy ra do những yếu tố nào?
Độ trễ có thể xảy ra do quá trình replication giữa các brokers hoặc do việc xử lý batch lớn. Điều chỉnh cấu hình của producers và consumers có thể giúp giảm thiểu độ trễ.
4. Câu hỏi liên quan đến bảo mật trong Kafka
4.1 Kafka hỗ trợ các cơ chế bảo mật nào?
Kafka hỗ trợ nhiều cơ chế bảo mật, bao gồm:
- Xác thực: Sử dụng SASL, Kerberos hoặc SSL để xác thực người dùng.
- Mã hóa: Sử dụng SSL/TLS để mã hóa dữ liệu khi truyền tải.
- Phân quyền: Sử dụng cơ chế phân quyền dựa trên ACL (Access Control Lists) để quản lý quyền truy cập.
4.2 Làm thế nào để cấu hình SSL trong Kafka?
Cấu hình SSL yêu cầu bạn tạo chứng chỉ SSL cho brokers và clients sau đó cấu hình Kafka để sử dụng các chứng chỉ này cho quá trình truyền tải dữ liệu bảo mật.