【发布时间】:2020-10-01 09:11:37
【问题描述】:
我是 Beam/Dataflow 的新手,正在尝试弄清楚它是否适合这个问题。我试图保持当前在排队系统中积压的消息类型的运行总和。系统使用单调递增的偏移量对消息进行排序:生产者在发送消息时学习该数字,消费者在以 FIFO 顺序处理每条消息时跟踪水印偏移量。该管道将有两个输入:来自生产者的计数和来自消费者的水印。
队列 producer 会定期将一批计数指标刷新到 Beam:
(type1, offset, count)
(type2, offset, count)
...
其中偏移量是生产者为 typeN 写入的最后一个偏移量,count 是它在当前批处理周期中排队的 typeN 消息的数量。
队列consumer会定期发送其最新消费的水印偏移量。这应该产生的效果是使偏移量低于此消费者水印的任何计数无效。
管道的输出是所有计数的总和,其偏移量高于迄今为止看到的最大消费者水印,按消息类型分组。 (每 5 分钟左右拍摄一次。)
(当然会有 10 万个消息“类型”、数百个生产者服务器、消费者不报告前进水印的偶尔 2 小时时段等)
这可行吗?这条管道需要维护和扫描无限量的计数记录历史,这似乎是 Beam 不适合的部分。
【问题讨论】:
-
对于每个键(消息),您希望有一个输出来计算自上次看到“水印”以来队列中有多少消息?
-
是的,对于在排队系统中看到的每种类型的消息,其中还有多少种类型的消息? (有多少没有被足够高的水印有效标记处理。)
标签: google-cloud-dataflow apache-beam