首页 > 解决方案 > Pubsub 消息缺少时间戳属性

问题描述

我正在尝试从 Apache Beam 读取 Pubsub 消息的时间戳值。

p.apply("Read PubSub messages", PubsubIO.readMessagesWithAttributes()
    .withIdAttribute("msg_id")
    .withTimestampAttribute("timestamp")
    .fromSubscription(options.getPubsubSubscription()))

但不幸的是,我收到了以下错误,这让我很惊讶,因为我认为每条消息都有一个默认时间戳。

An exception occured while executing the Java class. 
PubSub message is missing a value for timestamp attribute timestamp

为什么我的消息没有时间戳?是因为我通过 Pubsub UI 发布了它吗?

标签: google-cloud-platformgoogle-cloud-dataflowapache-beamgoogle-cloud-pubsub

解决方案


如果您省略 ,则每条 Pub/Sub 消息都将分配默认时间戳.withTimestampAttribute()。添加.withTimestampAttribute("timestamp")时意味着您将在timestamp每条消息的属性中提供时间戳。例如,使用 UI:

在此处输入图像描述

然后,窗口化将与这些时间戳相关,如果您需要从管道中访问它,您可以使用ProcessContext.timestamp()(更多详细信息here)。


推荐阅读