Kafka
Trang này chứa các mẹo và tài nguyên để chuẩn bị cho các cuộc phỏng vấn Kafka.
Dưới đây là 30 câu hỏi phỏng vấn về Apache Kafka, từ cơ bản đến nâng cao, kèm theo câu trả lời chi tiết. Các câu hỏi được thiết kế để kiểm tra kiến thức từ khái niệm cơ bản, cách hoạt động, đến các tình huống thực tế và tối ưu hóa.
Câu hỏi cơ bản
Apache Kafka là gì? Trả lời: Apache Kafka là một nền tảng phân tán để xử lý luồng dữ liệu (streaming data) theo thời gian thực. Nó được thiết kế để xử lý khối lượng lớn dữ liệu, có khả năng mở rộng cao, và hoạt động như một hệ thống nhắn tin (messaging system) hoặc hàng đợi phân tán (distributed queue).
Kafka được sử dụng để làm gì? Trả lời: Kafka được dùng để thu thập, lưu trữ và xử lý dữ liệu thời gian thực, chẳng hạn như log hệ thống, sự kiện người dùng, dữ liệu IoT, hoặc tích hợp giữa các hệ thống khác nhau.
Các thành phần chính của Kafka là gì? Trả lời: Kafka bao gồm:
Producer: Gửi dữ liệu đến Kafka.
Consumer: Nhận dữ liệu từ Kafka.
Broker: Máy chủ lưu trữ và quản lý dữ liệu.
Topic: Danh mục dữ liệu được lưu trữ.
Partition: Phân vùng trong topic để phân tán dữ liệu.
ZooKeeper: Quản lý cấu hình và đồng bộ hóa các broker.
Topic trong Kafka là gì? Trả lời: Topic là một danh mục hoặc tên luồng dữ liệu mà các producer gửi tin nhắn đến và consumer đọc từ đó. Nó giống như một bảng trong cơ sở dữ liệu hoặc một kênh trong hệ thống nhắn tin.
Partition trong Kafka là gì? Trả lời: Partition là một đơn vị nhỏ hơn của topic, cho phép dữ liệu được chia nhỏ và phân tán trên nhiều broker để tăng khả năng mở rộng và xử lý song song.
Offset trong Kafka là gì? Trả lời: Offset là một số thứ tự duy nhất được gán cho mỗi tin nhắn trong một partition. Nó giúp consumer theo dõi vị trí đọc dữ liệu.
Kafka khác gì so với các hệ thống nhắn tin truyền thống như RabbitMQ? Trả lời: Kafka tập trung vào xử lý luồng dữ liệu lớn với khả năng lưu trữ lâu dài và replay dữ liệu, trong khi RabbitMQ là hệ thống nhắn tin truyền thống tập trung vào việc giao tin nhắn nhanh chóng và xóa sau khi tiêu thụ.
ZooKeeper có vai trò gì trong Kafka? Trả lời: ZooKeeper quản lý cấu hình, đồng bộ hóa các broker, và theo dõi trạng thái của cluster Kafka (ví dụ: broker nào đang hoạt động, leader của partition là ai).
Consumer Group là gì? Trả lời: Consumer Group là một nhóm các consumer cùng đọc dữ liệu từ một topic. Mỗi partition chỉ được đọc bởi một consumer trong nhóm, giúp phân tải công việc.
Replication trong Kafka hoạt động như thế nào? Trả lời: Kafka sao chép dữ liệu của mỗi partition sang nhiều broker (gọi là replica) để đảm bảo tính sẵn sàng cao. Một replica là leader, các replica khác là follower, đồng bộ dữ liệu từ leader.
Câu hỏi trung cấp
Làm thế nào để Kafka đảm bảo tính bền vững của dữ liệu? Trả lời: Kafka ghi dữ liệu xuống đĩa (persistent storage) và sử dụng replication để sao chép dữ liệu trên nhiều broker. Producer có thể chọn chế độ xác nhận (acks) để đảm bảo tin nhắn được ghi thành công.
Các chế độ xác nhận (acks) của Producer là gì? Trả lời:
acks=0
: Không chờ xác nhận, nhanh nhưng không đảm bảo.acks=1
: Chờ leader ghi thành công, cân bằng giữa tốc độ và độ tin cậy.acks=all
: Chờ tất cả replica ghi thành công, an toàn nhất nhưng chậm hơn.
Kafka Connect là gì? Trả lời: Kafka Connect là một framework để tích hợp Kafka với các hệ thống bên ngoài (như cơ sở dữ liệu, file system) thông qua các connector (source và sink).
Kafka Streams là gì? Trả lời: Kafka Streams là một thư viện Java để xử lý và phân tích dữ liệu thời gian thực trực tiếp trên các topic của Kafka, hỗ trợ các thao tác như lọc, nhóm, và join.
Làm thế nào để tăng throughput trong Kafka? Trả lời: Tăng số partition, tối ưu batch size của producer, sử dụng nhiều consumer trong consumer group, và tăng số broker trong cluster.
Tại sao Kafka sử dụng log có cấu trúc tuần tự? Trả lời: Log tuần tự giúp Kafka đạt hiệu suất cao bằng cách giảm thao tác tìm kiếm ngẫu nhiên, tận dụng đọc/ghi tuần tự trên đĩa, và dễ dàng quản lý offset.
Consumer rebalancing là gì? Trả lời: Consumer rebalancing là quá trình Kafka tự động phân phối lại các partition giữa các consumer trong một consumer group khi có consumer mới tham gia hoặc rời đi.
Làm thế nào để xử lý dữ liệu trùng lặp trong Kafka? Trả lời: Sử dụng idempotent producer (gắn unique ID cho tin nhắn) hoặc xử lý logic deduplication ở phía consumer.
Retention period trong Kafka là gì? Trả lời: Retention period trong Kafka là khoảng thời gian mà dữ liệu (tin nhắn) được lưu trữ trong một topic trước khi bị xóa tự động. Kafka không xóa tin nhắn ngay sau khi consumer đọc chúng (như các hệ thống nhắn tin truyền thống), mà giữ lại dữ liệu dựa trên cấu hình retention period. Điều này cho phép consumer có thể đọc lại dữ liệu cũ nếu cần (replay).
Key và Value Serializer trong Kafka là gì? Trả lời: Key và Value Serializer là các lớp dùng để chuyển đổi dữ liệu (key và value của tin nhắn) thành định dạng byte để gửi qua Kafka, ví dụ: StringSerializer, IntegerSerializer, hoặc AvroSerializer.
Câu hỏi nâng cao
ISR (In-Sync Replicas) là gì? Trả lời: ISR là tập hợp các replica của một partition đang đồng bộ với leader. Nếu một follower không đồng bộ kịp (do chậm hoặc lỗi), nó sẽ bị loại khỏi ISR cho đến khi bắt kịp.
Làm thế nào để xử lý backpressure trong Kafka? Trả lời: Tăng số partition, giảm tốc độ gửi của producer (throttle), tăng tài nguyên cho consumer (CPU, memory), hoặc sử dụng buffer trung gian.
Kafka có hỗ trợ giao dịch (transaction) không? Trả lời: Có, Kafka hỗ trợ giao dịch từ phiên bản 0.11.0, cho phép producer gửi tin nhắn đến nhiều partition/topic một cách nguyên tử (atomic), đảm bảo exactly-once semantic.
Exactly-once delivery trong Kafka là gì? Trả lời: Exactly-once delivery đảm bảo mỗi tin nhắn được xử lý chính xác một lần, không trùng lặp hay mất mát, nhờ vào idempotent producer và transaction API.
Làm thế nào để tối ưu hóa hiệu suất của Kafka cluster? Trả lời: Tăng số partition, tối ưu batch size và linger time của producer, điều chỉnh replication factor, sử dụng compression, và cân bằng tải giữa các broker.
Kafka MirrorMaker là gì? Trả lời: Kafka MirrorMaker là một công cụ để sao chép dữ liệu giữa các Kafka cluster, thường dùng cho disaster recovery hoặc đồng bộ dữ liệu giữa các vùng địa lý.
Làm thế nào để giám sát Kafka cluster? Trả lời: Sử dụng các công cụ như JMX metrics (qua Prometheus, Grafana), Kafka Manager, hoặc Burrow để theo dõi throughput, latency, consumer lag, và trạng thái broker.
Consumer lag là gì và làm sao để giảm nó? Trả lời: Consumer lag là độ trễ giữa tin nhắn mới nhất trong partition và tin nhắn mà consumer đã đọc. Để giảm, tăng số consumer, tối ưu xử lý consumer, hoặc giảm tốc độ producer.
Kafka có thể thay thế cơ sở dữ liệu không? Trả lời: Không, Kafka là hệ thống xử lý luồng dữ liệu, không hỗ trợ truy vấn ngẫu nhiên hay cập nhật dữ liệu như cơ sở dữ liệu. Tuy nhiên, nó có thể kết hợp với hệ thống như KSQL hoặc cơ sở dữ liệu để lưu trữ lâu dài.
Khi nào nên sử dụng Kafka Streams thay vì Spark Streaming? Trả lời: Dùng Kafka Streams khi cần xử lý nhẹ, tích hợp chặt chẽ với Kafka, và triển khai đơn giản. Dùng Spark Streaming khi cần xử lý phức tạp hơn (machine learning, batch processing) hoặc tích hợp với hệ sinh thái Spark.
Last updated