【问题标题】:how to capture processing times of messages flowing thru MQ -> App -> Kafka -> App -> Kafka如何捕获流经 MQ -> App -> Kafka -> App -> Kafka 的消息的处理时间
【发布时间】:2020-03-21 10:06:37
【问题描述】:

我的系统管道为“IBM MQ 队列--> Springboot 应用程序(消息格式化程序)--> Kafka topic-1(消息队列)--> Springboot 应用程序(消息转换器)--> --> Kafka 主题- 2(消息队列)”。

我的要求是测试在 IBM MQ 中生成并通过管道处理的消息的端到端处理时间。我有一个带有 JMS 客户端的 JMeter 负载测试脚本,它生成大量通过管道泵送的消息。 Dynatrace Kafka 监控尚未实现,但此处使用 Confluent Control Center for Kafka 监控。

您能否建议可能的选项来衡量 Springboot 应用程序(通过 DevOps Jenkins 管道部署的消息格式化程序和消息转换器应用程序)处理的消息的单个和端到端处理时间?

【问题讨论】:

  • 您是否在所有组件上设置了 Confluent 拦截器?其他选项包括分布式跟踪
  • 不确定。会检查并通知您。
  • 如果有,那么它们都会出现在控制中心

标签: apache-kafka performance-testing performance-measuring


【解决方案1】:

理论上,您可以使用 JSR223 Test Elements 中的 Kafka Client Consumer 代码从 JMeter 本身获取 Kafka 主题中未决消息的数量

示例代码:

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("test"));
while(true) {
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecord<String, String> record : records) {
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());

        // after each message, query the number of messages of the topic
        Set<TopicPartition> partitions = consumer.assignment();
        Map<TopicPartition, Long> offsets = consumer.endOffsets(partitions);
        for(TopicPartition partition : offsets.keySet()) {
            System.out.printf("partition %s is at %d\n", partition.topic(), offsets.get(partition));
        }
    }
}

这些值可以使用vars shorthand 存储到Sample Variables 中,并作为自定义图表绘制到JMeter HTML Reporting Dashboard 中。

【讨论】:

  • 虽然,endOffsets 并不总是“主题中的消息数”
  • 非常感谢您的帮助。如果你们有上面的示例 JMeter 测试脚本,你能分享给我吗?我认为,我们需要在 JMeter 中设置 Kafka 配置才能使用上述代码。
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2019-06-21
  • 2017-04-18
  • 1970-01-01
相关资源
最近更新 更多