java - 使用 WSO Siddhi Java 库进行事件检索时出现过度延迟

标签 java siddhi

我正在使用 Siddhi [1] 的 Java 库,并且注意到检索和处理由 Siddhi 运行时生成的事件有相当大的延迟。尽管两个Siddhi事件可能具有时间差为X秒的Siddhi事件时间戳,但是在接收Siddhi事件时生成的相关应用级时间戳是在同一秒内生成的。为了说明这一点(所有时间戳都被修剪为秒):

  • Siddhi 事件 1 时间戳:1571059612
  • Siddhi 事件 2 时间戳:1571059616

  • 接收 Siddhi 事件 1 时的应用程序时间戳:1571059617

  • 接收 Siddhi 事件 2 时的应用时间戳:1571059617

应用程序时间戳是正确的 - 即 Siddhi 事件传播被延迟。此外,已通过将应用程序时间戳设置为等于 Siddhi 事件时间戳来验证 Siddhi 事件时间戳。但是,由于 Siddhi 事件是在一个时间窗口内创建的,因此我无法考虑使用真实但延迟的 Siddhi 时间戳的选项。此行为是意外的,因为事件预计会在生成时被接收。

有问题的应用程序摘录由以下代码示例提取:

running_siddhi_thread.getSiddhi_app_runtime().addCallback(output_stream_name, new StreamCallback() {
    @Override
    public void receive(Event[] events) {
        for (Event event : events) {
                //retrieval and processing of event
                do_processing_based_on_event(event) //this includes the Application timestamp generation
                create_new_message_with_timestamp(params)
            }
        }
});

触发的 Siddhi 查询的形式为:

from inputstream #window.timeBatch(5 sec )
select avg(attr1) as avg_attr1, avg(attr2) as avg_attr2
having avg_attr1>1000 and avg_attr2>800
insert into output_stream_name;

我验证了在 Siddhi 中,事件在发生的那一秒即显示在日志中,即时间戳 15710596121571059616。时间戳为 1571059612 的事件表示自 1571059607 以来检查了 attr1attr2 值,并且它们的平均值发现超出了 1571059612 的限制。问题在于,对于 Java 库,事件的发布有延迟。

是否需要设置一个特殊选项(例如在线程级别)以确保来自 Siddhi 的事件以更短的延迟传播?

[1] https://siddhi.io/en/v5.1/docs/siddhi-as-a-java-library/

最佳答案

Siddhi 在管道期间保留原始事件的时间戳。您获得的时间戳将来自事件发送到 siddhi 管道的时间

关于java - 使用 WSO Siddhi Java 库进行事件检索时出现过度延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392629/

相关文章:

java - 回收者 View 混合了其元素的内容

java - Siddhi 如何使用统计数据

mongodb - Wso2 Stream Mongo Datetime 连接查询

Siddhi CEP 3.x 新手问题

java - 在Windows上将mongoDB安装为docker镜像

java - 为什么我必须在 maven 项目中手动为 sql db 定义驱动程序

java - p :inputText in p:inplace when DB constraint validation failed 的重置值

Java循环和移位

java - 添加 2 个或更多 .jar 文件时出错。在模块 (Android) 中发现重复的类。有没有办法合并或排除重复的类?

java - Siddhi 是否无法按多个变量进行分组?