首页 文章

Siddhi:状态持久性和实时可查询状态?

提问于
浏览
0

My Scenario is like this.

我想查看/查询活动处理窗口的特定查询的当前聚合值是什么 .

我在Apache Flink见过这个 .

For e.g:

假设我有一个查询来计算失败的总数,每12小时开窗一次 . 我想(从另一个应用程序)询问活动聚合窗口的当前计数是多少 . 请注意,活动窗口仍在处理中 .

原因是我的应用程序需要向用户提供有关其当前总故障计数的反馈 . 所以他/她可以基于此行事 . 等待处理窗口然后获得计数,这不是用户视角中的期望行为 .

这可能吗?如果是这样的话?

1 回答

  • 0

    一种选择是使用rolling time window . 滚动时间窗口将为您提供给定时间范围的滚动聚合(总和,计数等) . 因此,对于每个传入的事件,您将获得带有计数的输出事件 . 您可以使用它来提供反馈 . 这种方法有两种方法 . 一个是滚动计数而不是批次计数 . 另一个是使用事件计数流来触发进程 . 如果您想根据其他要求触发反馈(例如:用户启动,每小时等),这种方法将无效 . 为此,您需要使用以下方法 .

    使用time batch window然后将其与另一个流连接,这将根据业务需求触发 . 以下是一个示例,以下是testcases供您参考 .

    from countStream#window.timeBatch(12 hrs) right outer join 
    feedbackTriggerStream#window.length(1)
    select count() as totalFailures
    insert into FeedbackStream;
    

    另一种选择是使用query功能 . 如果您使用Siddhi作为库并且您可以访问SiddhiAppRuntime,则此方法是合适的 . 下面是一个代码示例 . 让我们假设下面是您的窗口查询来计算计数 .

    define countWindow(userid string, reason string) timeBatch(12 hrs);
    
    From countStream
    Select *
    Insert into countWindow;
    

    然后,您可以使用以下查询来访问窗口数据 .

    Event[] events = siddhiAppRuntime.query(
    "from countWindow " +
    "select count() as totalCount ");
    

    事件将包含一个带有计数的事件 . 这是对testcases的引用 .

相关问题