- Apache Kafka là gì và tại sao nó được sử dụng phổ biến trong hệ thống phân tán?
Kafka là distributed event streaming platform cho phép xử lý dữ liệu real-time với throughput cao, latency thấp và khả năng replay message — lý do chính khiến nó phổ biến trong hệ thống phân tán. Apache Kafka được LinkedIn phát triển và open-source năm…
- Giải thích kiến trúc Kafka: Broker, Topic, Partition, Consumer Group hoạt động như thế nào?
Kafka cluster gồm nhiều Broker lưu Topic, mỗi Topic chia thành Partition để song song hoá, và Consumer Group để scale đọc. Broker là một server Kafka chạy độc lập; một Kafka cluster thường có nhiều broker để đảm bảo high availability. Topic là kênh…
- Producer và Consumer trong Kafka hoạt động như thế nào? Các cấu hình quan trọng cần biết?
Producer gửi message đến một topic và Kafka tự động phân phối message vào các partition (theo key hash, round-robin, hoặc custom partitioner). Cấu hình quan trọng của producer: acks (0=fire-and-forget, 1=leader ack, all=tất cả ISR ack), retries, batch.size và linger.ms để tối ưu throughput.…
- Offset management trong Kafka là gì? Phân biệt auto commit và manual commit?
Offset là số thứ tự của message trong một partition, bắt đầu từ 0. Kafka lưu offset của consumer vào một internal topic tên consumeroffsets. Auto commit (enable.auto.commit=true) sẽ tự động commit offset theo chu kỳ auto.commit.interval.ms (mặc định 5000ms), nhưng có thể dẫn đến…
- Message ordering trong Kafka được đảm bảo như thế nào? Khi nào ordering bị phá vỡ?
Kafka đảm bảo thứ tự message trong phạm vi một partition — các message được ghi và đọc theo đúng thứ tự FIFO. Tuy nhiên, không có đảm bảo thứ tự giữa các partition khác nhau. Để đảm bảo ordering cho một nhóm message liên…
- Replication và ISR (In-Sync Replicas) trong Kafka là gì? Cách Kafka đảm bảo fault tolerance?
Mỗi partition có một leader và nhiều follower replica trên các broker khác nhau. Leader xử lý tất cả read/write, follower chủ động pull data từ leader để sync. ISR (In-Sync Replicas) là tập hợp các replica đang sync kịp với leader (không bị lag…
- Kafka Connect là gì? Nó giải quyết bài toán gì trong data pipeline?
Kafka Connect là framework tích hợp sẵn trong Kafka ecosystem để kết nối Kafka với các external system (database, file system, cloud storage, search engine) mà không cần viết code. Kafka Connect có hai loại connector: Source Connector (đọc data từ external system vào Kafka,…
- Kafka Streams là gì? Khác gì so với việc consume message thông thường?
Kafka Streams là thư viện Java/Scala để xây dựng ứng dụng stream processing trực tiếp trên Kafka, không cần external cluster như Spark hay Flink. Kafka Streams cung cấp các operation high-level như filter, map, groupBy, aggregate, join giữa các stream. Điểm khác biệt: consumer…
- Các use case phổ biến nhất của Kafka trong thực tế là gì?
Kafka được dùng rộng rãi cho log aggregation, event sourcing, CDC, và microservices communication nhờ khả năng lưu trữ và replay message. Các use case phổ biến của Kafka trong production: - Log aggregation: tập hợp log từ nhiều service vào một nơi, sau đó…
- Exactly-once semantics (EOS) trong Kafka hoạt động như thế nào? Giải thích idempotent producers và transactions.
- Các chiến lược partition trong Kafka: khi nào dùng key-based, round-robin, hay custom partitioner?
- Consumer rebalancing trong Kafka: vấn đề gì có thể xảy ra và cách tối ưu?
- Dead Letter Queue (DLQ) trong Kafka là gì? Cách implement xử lý message lỗi?
- Monitoring và performance tuning Kafka: các metrics quan trọng và cách tối ưu throughput/latency?
- Kafka trong kiến trúc microservices: event-driven architecture, saga pattern, và các lỗi cần tránh?
- Schema Registry trong Kafka ecosystem là gì? Tại sao cần dùng Avro/Protobuf thay vì JSON?
- KRaft mode trong Kafka là gì? Tại sao Kafka loại bỏ ZooKeeper?
- Idempotent producer trong Kafka là gì? Cách bật và hoạt động như thế nào?
Idempotent producer đảm bảo rằng dù producer retry gửi message bao nhiêu lần (do network error, timeout), mỗi message chỉ được ghi đúng một lần vào partition. Cách hoạt động: Kafka assign cho mỗi producer một Producer ID (PID) duy nhất và mỗi message có…
- Producer batching trong Kafka: linger.ms và batch.size hoạt động thế nào để tối ưu throughput?
Mặc định Kafka producer gửi message ngay lập tức (linger.ms=0), nhưng cách này kém hiệu quả khi throughput cao vì mỗi request chứa ít record. batch.size (default 16384 bytes = 16KB) là kích thước tối đa của một batch per-partition — khi batch đầy, gửi…
- At-least-once vs at-most-once vs exactly-once trong Kafka: phân biệt và cách đạt được mỗi loại?
At-most-once (fire-and-forget): producer đặt acks=0, consumer commit offset trước khi xử lý. Message có thể mất nhưng không bao giờ trùng. Hợp với metrics, log — những thứ không cần chính xác tuyệt đối. At-least-once: producer đặt acks=all kèm retries, consumer commit sau khi xử…
- Consumer group và partition assignment: cách Kafka phân phối partition cho consumers?
Kafka Group Coordinator (broker) quản lý consumer group lifecycle và partition assignment. Khi consumer join group, Group Coordinator trigger rebalance và chọn một consumer làm Group Leader — Leader thực hiện partition assignment theo strategy đã cấu hình và gửi kết quả về Coordinator. RangeAssignor…
- Kafka consumer lag là gì? Cách monitor và alert khi lag quá cao?
- Log compaction trong Kafka là gì? Tombstone record dùng để làm gì?
- min.insync.replicas và acks=all kết hợp bảo vệ data như thế nào? Khi nào producer throw NotEnoughReplicasException?
- MirrorMaker 2 là gì? Cách thực hiện cross-cluster replication trong Kafka?
- ksqlDB là gì? Khác gì so với Kafka Streams?
- Event sourcing với Kafka: pattern hoạt động như thế nào và lợi ích/nhược điểm?
- Transactional Outbox Pattern là gì? Tại sao cần thiết khi dùng Kafka với database?
- Kafka vs RabbitMQ: so sánh chi tiết trade-offs để chọn đúng cho từng use case?
- CQRS pattern với Kafka: Command side và Query side tách biệt như thế nào?
- Partition key design trong Kafka: cách chọn key để tránh hotspot và đảm bảo ordering?
Partition key quyết định message vào partition nào (hash(key) % numPartitions). Chọn key sai dẫn đến: hotspot (một partition bị overload), hoặc mất ordering (message liên quan vào partition khác nhau). Nguyên tắc chọn key: chọn field có cardinality cao và phân phối đều —…
- Message queue là gì và khi nào nên dùng?
Message queue là kênh giao tiếp bất đồng bộ giữa các service: producer đẩy message vào queue, consumer lấy ra xử lý; message tồn tại tới khi được xử lý. Lợi ích: - Decoupling: producer và consumer không phụ thuộc trực tiếp, không cần online…
- Kafka giữ dữ liệu (data retention) theo cơ chế nào?
Kafka giữ message theo cấu hình retention của từng topic, độc lập với việc consumer đã đọc hay chưa. Hai chiều giới hạn: - Theo thời gian — retention.ms: giữ message trong khoảng thời gian đặt trước (mặc định 7 ngày = 604800000ms). Quá hạn,…
- Producer của Kafka nén dữ liệu ra sao, đánh đổi thế nào?
Producer đặt qua compression.type, chọn một trong: none, gzip, snappy, lz4, zstd. Producer nén cả một batch message trước khi gửi, broker lưu nguyên dạng nén, consumer giải nén — tiết kiệm băng thông mạng lẫn dung lượng đĩa. Tương tác với batching: nén hoạt…
- Kafka Streams và Apache Flink — khi nào chọn cái nào?
- At-most-once, at-least-once, exactly-once khác nhau thế nào? Thực tế nên chọn cái nào?
Ba mức đảm bảo giao message: - At-most-once: mỗi message được xử lý tối đa một lần, có thể mất. Consumer commit offset trước khi xử lý; xử lý lỗi thì message coi như đã tiêu thụ. Chỉ hợp với dữ liệu chấp nhận mất…
- DLQ dùng để làm gì? Quy trình xử lý message đã rơi vào DLQ ở production ra sao?
DLQ (dead letter queue) là nơi chứa message không xử lý được sau khi hết số lần retry. Mục đích là tách message hỏng ra khỏi luồng chính để consumer tiếp tục chạy, đồng thời không mất dữ liệu. Message vào DLQ phải mang đủ…
- Làm sao đảm bảo thứ tự message? Chọn partition key thế nào và đánh đổi là gì?
Kafka chỉ đảm bảo thứ tự trong một partition, không đảm bảo giữa các partition. Muốn các sự kiện liên quan nhau giữ đúng trình tự thì phải đưa chúng về cùng một partition bằng cách dùng chung key. Chọn key theo đơn vị cần…
- Consumer lag là gì, đo bằng cách nào? Lag tăng liên tục thì xử lý ra sao?
Consumer lag = offset mới nhất của partition (log end offset) trừ offset mà consumer group đã commit. Nó cho biết consumer đang chậm hơn producer bao nhiêu message. Đo: Cột LAG hiện theo từng partition. Trong hệ thống thật thì lấy metric qua Burrow…
- Rebalance trong consumer group là gì? Nó gây ảnh hưởng gì và giảm tác động thế nào?
Rebalance là quá trình phân bổ lại partition cho các consumer trong group. Nó xảy ra khi consumer tham gia/rời group, khi consumer bị coi là chết (quá session.timeout.ms không gửi heartbeat, hoặc quá max.poll.interval.ms không gọi poll()), hoặc khi số partition của topic thay…
- Kafka làm exactly-once bằng cách nào? Giới hạn của nó nằm ở đâu?
- Message schema thay đổi thì làm sao không làm hỏng consumer? Backward và forward compatibility khác nhau ra sao?