当前位置: 首页 > 知识库问答 >
问题:

编年史队列POC返回意外延迟

舒飞捷
2023-03-14

当我们执行一些负载测试时,我们注意到明显的性能下降,所有的调查都指出Kafka主题、生产者和消费者延迟的大幅增加。无论我们改变了多少配置或添加了更多资源,我们都无法摆脱症状。

目前,我们的需求是每秒处理10个事务(TPS),负载测试是执行20个TPS,但随着系统的发展和增加更多的功能,我们知道我们将达到500TPS的需求阶段,所以我们开始担心是否可以用Kafka实现这一点。

作为概念证明,我尝试切换到我们的一个微服务,使用编年史队列而不是Kafka主题。很容易按照avro示例从Chronicle-Queue-Demo git hub repo进行迁移

public class MessageAppender {
    private static final String MESSAGES = "/tmp/messages";

    private final AvroHelper avroHelper;
    private final ExcerptAppender messageAppender;

    public MessageAppender() {
        avroHelper = new AvroHelper();
        messageAppender = SingleChronicleQueueBuilder.binary(MESSAGES).build().acquireAppender();
    }

    @SneakyThrows
    public long append(Message message) {
        try (var documentContext = messageAppender.writingDocument()) {
            var paymentRecord = avroHelper.getGenericRecord();
            paymentRecord.put("id", message.getId());
            paymentRecord.put("workflow", message.getWorkflow());
            paymentRecord.put("workflowStep", message.getWorkflowStep());
            paymentRecord.put("securityClaims", message.getSecurityClaims());
            paymentRecord.put("payload", message.getPayload());
            paymentRecord.put("headers", message.getHeaders());
            paymentRecord.put("status", message.getStatus());
            avroHelper.writeToOutputStream(paymentRecord, documentContext.wire().bytes().outputStream());
            return messageAppender.lastIndexAppended();
        }
    }
}

提前感谢您的意见和建议。

共有1个答案

毕霖
2023-03-14

每次手工构建Avro对象对我来说都有点代码味道。

您可以创建一个预定义的消息->avro序列化程序并使用它来为队列提供信息吗?

或者,仅仅为了测试,在循环之外创建一个avro对象,并多次将该对象送入队列。这样,你就可以看到是建筑还是排队是瓶颈。

 类似资料:
  • 几天前我开始使用chronicle-queue,我正在浏览它的文档。

  • 编年史队列doco指定可以在不同的盒子上有编年史接收器,事件通过网络从单个编年史队列分发到它。(http://chronicle.software/products/chronicle-queue/)

  • 我有一个web服务器(比如tomcat),它为http请求服务 每个请求处理都可能生成一些跟踪信息。 我将把这些跟踪信息写入编年史队列(以字节[]为单位,我将自己进行编组/解编组,就像使用protobuf一样) 我将有一个专用的线程来使用裁剪器从编年史队列中读取。每个消息将只处理一次,如果失败,我将使用自己的重试策略将其放回队列以允许下次尝试。 基于以上用例,我有以下问题: > 应该使用多少追加器