我有一个数据流管道,用于收集用户数据,如导航,购买,crud操作等。我有这个要求,能够实时识别模式,然后调度其他服务可以监听的pubsub事件,以便为用户提供实时提示,优惠或促销。
我正在考虑按用户ID开始对事件进行分组,然后匹配模式以创建包含需要通过pubsub触发的事件名称的PCollection。
这是正确的做法吗?还有更好的方法吗?
答案 0 :(得分:2)
对于某些用例,肯定可以正常工作。
如果您将session based windowing与early firings结合使用(在每个元素到达时触发)。每次新元素到达时,您都可以拥有识别模式所需的所有数据。
但是,根据推送的用户数据的速率和会话的大小,这可能会导致在PCollection中保留大量数据并重复此模式匹配很多(在相同的数据),因为您必须重用会话中的所有数据。此外,您不能使用在此会话之前到达的元素。
有时候,您可能会通过为每个用户保持状态来做得更好(无需为此会话重做用户所有数据上的模式匹配)。事实上,使用状态会消除使用窗口的需要。 新流程现在看起来像这样:
对于到达的每个元素:
获取当前状态
计算新状态(基于旧状态和新元素)
如果需要,请向PubSub发送消息。
要保持您的状态,您可以使用 BigTable 或数据存储区。