我有一个处理短信的系统。每条消息被分成句子,每个句子被单独处理,每个句子的结果被发布到一个主题。这一切都是异步发生的。
我希望能够汇总句子的结果。
问题是我希望窗口在达到句子总数或总时间已经过去时结束。基本上是翻滚时间窗口,但是当收到结果总数时可以结束。
其次,我希望能够知道该窗口何时结束,以便我可以将聚合处理为原子事件。
答案 0 :(得分:1)
这是可能的,但您必须实现自定义处理器 - 您的要求只是针对要满足的高级API的具体要求。
您的处理器会将消息存储到状态存储中,并使用标点符号来定期检查窗口是否已过期。它还会保留一个运行计数器并检查是否已收到最大结果数。如果满足任一条件,它将执行聚合,从状态存储中删除消息并将结果发送到下游。
你必须考虑在重启(失败/重新平衡)时要做什么。启动时,处理器应检查其状态存储并计算当前运行计数和窗口到期时间。
答案 1 :(得分:0)
现在 Apache Kafka 为您提供了一种等待关闭窗口的方法。这里是一段代码;
suppress(Suppressed.untilWindowCloses(Suppressed.BufferConfig.unbounded()))
欲知更多,check it out.