Gatling是否支持多协议并行执行?以双Kafka Topic场景为例
双Gatling场景并行向不同Kafka Topic发送事件的方案可行性确认
这个方案完全可行,Gatling的setUp方法原生支持同时启动多个独立场景,每个场景可以绑定专属的协议配置,刚好适配你这种「Kafka Topic配置在协议层级」的需求。
你提供的代码思路是正确的,下面是补充上下文后的规范代码示例:
// 配置指向Topic_1的Kafka协议 val kafkaConfTopic_1 = KafkaProtocol .kafka .topic("topic_1") .producerProps( ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -> "kafka-broker:9092", ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG -> classOf[StringSerializer].getName, ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG -> classOf[StringSerializer].getName // 其他生产者配置按需添加 ) // 配置指向Topic_2的Kafka协议 val kafkaConfTopic_2 = KafkaProtocol .kafka .topic("topic_2") .producerProps( ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -> "kafka-broker:9092", ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG -> classOf[StringSerializer].getName, ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG -> classOf[StringSerializer].getName // 其他生产者配置按需添加 ) // 定义发送Topic_1的场景 val scn = scenario("Produce Events to Topic_1") .exec( KafkaProducerAction .send("send_event_topic1") .message(StringBody("""{"type": "test_topic1", "data": "sample"}""")) ) // 定义发送Topic_2的场景 val scn2 = scenario("Produce Events to Topic_2") .exec( KafkaProducerAction .send("send_event_topic2") .message(StringBody("""{"type": "test_topic2", "data": "sample"}""")) ) // 并行启动两个场景,各自绑定对应Kafka协议 setUp( scn.inject( rampUsersPerSec(1).to(60).during(10 minutes), constantUsersPerSec(60).during(60 minutes), rampUsersPerSec(60).to(1).during(10 minutes) ).protocols(kafkaConfTopic_1), scn2.inject( rampUsersPerSec(1).to(60).during(10 minutes), constantUsersPerSec(60).during(60 minutes), rampUsersPerSec(60).to(1).during(10 minutes) ).protocols(kafkaConfTopic_2) )
额外说明
- 两个场景的注入策略可以完全独立调整,无需强制保持一致,根据实际压测需求修改即可
- 需确保Kafka协议配置中的序列化器、集群地址等参数与你的Kafka集群匹配
- 压测期间建议监控Kafka集群的分区负载、生产吞吐量等指标,避免并发过高导致生产失败
内容的提问来源于stack exchange,提问作者lahiruW
相关产品推荐
相关产品推荐

