Câu hỏi đặt ra là làm thế nào để cập nhật một pipeline Cloud Dataflow streaming mà không làm mất dữ liệu, đặc biệt khi phiên bản mới không tương thích với phiên bản cũ.
Lựa chọn A: "Update the current pipeline and use the drain flag." là phương án chính xác. Khi sử dụng cờ drain, Dataflow sẽ xử lý tất cả dữ liệu còn lại trong nguồn (như Pub/Sub subscription) và tất cả các trạng thái đang có trong pipeline hiện tại trước khi dừng pipeline. Sau đó, pipeline mới sẽ được khởi động và bắt đầu xử lý dữ liệu từ trạng thái mới. Điều này đảm bảo không có dữ liệu nào bị mất và quá trình chuyển đổi giữa các phiên bản pipeline diễn ra một cách liền mạch, ngay cả khi có sự thay đổi lớn (incompatible update) trong logic xử lý hoặc cấu trúc dữ liệu. Dataflow tự động quản lý việc duy trì offset trong Pub/Sub và xử lý các trạng thái nội bộ.
Lựa chọn B: "Update the current pipeline and provide the transform mapping JSON object." Phương pháp này được sử dụng khi bạn cần khớp các bước hoặc trạng thái trong một pipeline được cập nhật với một pipeline hiện có, thường là để tiếp tục xử lý từ một snapshot. Tuy nhiên, nó không giải quyết triệt để vấn đề không tương thích của pipeline mới với pipeline cũ một cách an toàn mà không có nguy cơ mất dữ liệu nếu không được kết hợp thêm các yếu tố khác. Trong trường hợp không tương thích, việc ánh xạ có thể không đủ để duy trì tính toàn vẹn của dữ liệu.
Lựa chọn C: "Create a new pipeline that has the same Cloud Pub/Sub subscription and cancel the old pipeline." Việc tạo một pipeline mới sử dụng cùng một subscription và hủy pipeline cũ có thể dẫn đến mất dữ liệu. Khi bạn hủy pipeline cũ, nó sẽ không xử lý hết các tin nhắn còn lại trong subscription. Đồng thời, hai pipeline cùng đọc từ một subscription Pub/Sub mà không có cơ chế phối hợp (ví dụ, chia sẻ trạng thái hoặc sử dụng snapshot) có thể gây ra việc đọc lại dữ liệu (replay) nếu pipeline mới không biết được điểm mà pipeline cũ đã xử lý đến, hoặc bỏ sót dữ liệu nếu pipeline cũ bị hủy trước khi pipeline mới có thể bắt đầu xử lý hiệu quả. Drain là một cách tốt hơn để đảm bảo việc đọc tin nhắn tới điểm cuối cùng trước khi dừng.
Lựa chọn D: "Create a new pipeline that has a new Cloud Pub/Sub subscription and cancel the old pipeline." Việc tạo một subscription mới cho pipeline mới chắc chắn sẽ làm mất tất cả dữ liệu đã được gửi đến subscription cũ (mà pipeline cũ đang đọc nhưng chưa xử lý xong) ngay lập tức khi pipeline cũ bị hủy. Đây là lựa chọn sai lầm nhất vì nó cố tình bỏ qua dữ liệu từ subscription cũ.
(Đáp án được gợi ý bởi AI)