Google数据工程师认证样题答疑:为何选D而非B?
为什么正确答案是D而非B?
核心问题在于你误解了Cloud Pub/Sub中messageId的作用——它根本没法用来做业务事件的去重。
选项B的问题
Cloud Pub/Sub生成的messageId是单次发布请求的唯一标识,和业务事件本身无关。当POS终端因为网络中断重试发送同一个库存更新事件(比如同一个订单的商品扣减),这是两次独立的发布操作,Pub/Sub会给这两次请求生成完全不同的messageId。你要是用messageId去重,根本识别不出这是同一个业务事件的重试,重复消息还是会被处理,库存统计依然会出错。
选项D的合理性
库存更新的本质是绑定到具体订单的:同一个订单对同一个商品的库存变更,无论终端重试多少次,都只应该被计算一次。添加orderId作为业务层面的唯一订单标识,再结合prodSku(商品SKU),就能精准识别重复的业务事件——只要是同一个orderId+prodSku的组合,就判定为同一库存更新操作的重试,直接丢弃即可,这样就能彻底避免重复统计的问题,保证库存数据准确。
其他选项的问题补充
- 选项A:
publishTime是消息发布的时间戳,重试消息的publishTime必然不同,而且不同业务事件也可能刚好在同一时间发布,完全不具备去重的可行性。 - 选项C:用最终库存值
adjustedQuantity替代增量quantityDelta,会丢失实时增量的上下文,而且多个终端并发更新时,直接覆盖最终值会导致数据冲突,根本没法保证统计准确。
内容的提问来源于stack exchange,提问作者WernerZiegler
相关产品推荐
相关产品推荐

