【发布时间】:2017-03-16 04:51:33
【问题描述】:
我们正在尝试使用数据流的处理时间独立性来启动一个新的流作业并通过 Pub/Sub 将我们的所有数据重播到其中,但遇到了以下问题:
管道的第一阶段是对事务 id 的 groupby,会话窗口为 10 秒,丢弃已触发的窗格,并且不允许延迟。因此,如果我们没有指定重播 pub/sub 主题的 timestampLabel,那么当我们重播到 pub/sub 时,所有事件时间戳都是相同的,并且 groupby 会尝试将我们所有的存档数据一直分组到事务 id 中。不好。
如果我们将 timestampLabel 设置为存档数据中的实际事件时间戳,并在 pub/sub 主题中一次重播 1d 次,那么它适用于第一天的事件,但只要这些是已用尽重播发布/订阅的数据水印会以某种方式向前跳转到当前时间,并且所有后续重播天数都将作为延迟数据丢弃。我真的不明白为什么会这样,因为它似乎违反了数据流逻辑独立于处理时间的想法。
如果我们将 timestampLabel 设置为存档数据中的实际事件时间戳,并将其全部重播到 pub/sub 主题中,然后启动流式作业来消费它,数据水印似乎永远不会前进,并且groupby 似乎没有任何结果。我也不太明白这是怎么回事。
【问题讨论】:
-
您能否澄清一下您使用什么将历史数据写入 pubsub,有多少数据,您是按事件时间顺序还是按任意顺序写入数据?此外,对于您的方法 #2 或 #3,查看太慢的作业的作业 ID 会有所帮助。
-
最初我们有一个批处理作业,它从 bq 表中读取数据并将其写入 pub/sub。在那之后不起作用(我们假设因为同一时间戳上有太多数据)我们将其更改为运行一系列批处理作业,一次重播一天,因为这是我们唯一能找到从 bq 读取的以任何顺序。所以它在一天之内是任意顺序的,但是天是有序的。我正在查看的当前运行已归档大约 100 万个事件,但一旦投入生产,它将达到数十亿。方法 #2 的作业 ID 是 2016-11-02_11_05_48-11273762957648435844 仍在运行
标签: google-cloud-dataflow apache-beam