0

我正在使用 Chronicle Queue (CQ) 设置市场数据回测,从二进制文件读取数据然后写入单个 CQ,同时从该 CQ 读取数据并转储统计数据。我正在做一个 POC 来替换我们现有的实时市场数据馈送处理程序工作队列。在 Linux/SSD 设置上进行基本的读/写测试时,我看到读取落后于写入 - 事实上延迟正在累积。Appender 和 Tailer 都在同一主机上作为单独的进程运行。

想知道,如果我使用的代码有任何问题?

以下是代码片段 -

作家 - 在构造函数中 -

    myQueue = SingleChronicleQueueBuilder.binary(queueName).build();
    myAppender = myQueue.acquireAppender();

在数据回调中 -

    myAppender.writeDocument(myDataPacket);
    myQueue.close();

其中 myDataPacket 是包装 byte[] 和其他字段的 Java 对象。

Tailer - 在构造函数中 -

myQueue  = SingleChronicleQueueBuilder.binary(queueName).build();
myTailer = myQueue.createTailer();

在读取方法中 -

    while (notLastRecord)
    {
        if(myTailer.readDocument(myDataPacket))
        {
            notLastRecord = ;
            //do stuff
        }
    }
    myQueue.close();

非常感谢任何帮助。

谢谢,帕万

4

1 回答 1

0

首先,我假设“读取滞后于写入-实际上延迟正在累积”,您的意思是对于每条后续消息,从队列中读取消息的时间都比将事件写入队列的时间更远。

如果您看到这样的延迟累积,很可能数据的生成速度要快得多,那么您可以使用它,从您描述的用例中这是非常有可能的 - 如果您在写入端需要的只是解析简单的文本行并将其转储到队列文件,它很快,但是如果您在从队列中读取条目时进行一些处理 - 它可能会更慢。

从代码中不清楚您的代码正在做什么/做了多少工作,并且代码对我来说看起来不错,除非您可能不应该在每次 appender.writeDocument() 调用之后调用 queue.close() 但很可能您不是否则它会爆炸。

如果没有看到实际的代码或测试用例,就不可能多说。

于 2019-11-05T21:26:33.257 回答