feat(syslog-consumer-rule): 增加慢批次全链路耗时诊断
- 批次端到端耗时达到500ms时输出SLOW_SYSLOG_BATCH日志 - 记录入口统计、规则计算、InfluxDB和达梦写入的分阶段耗时 - 使用MANUAL_IMMEDIATE模式准确统计Kafka offset同步提交耗时 - 记录Kafka提交状态、异常类型和端到端总耗时 - 在常规批次日志中补充ingressMs - 增加Kafka监听器ACK模式回归测试
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
package com.config;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.autoconfigure.kafka.ConcurrentKafkaListenerContainerFactoryConfigurer;
|
||||
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
|
||||
import org.springframework.kafka.core.ConsumerFactory;
|
||||
import org.springframework.kafka.listener.ContainerProperties;
|
||||
import org.springframework.kafka.listener.DefaultErrorHandler;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class KafkaReliabilityConfigTest {
|
||||
|
||||
@Test
|
||||
void retryListenerCommitsInsideAcknowledgment() {
|
||||
KafkaReliabilityConfig config = new KafkaReliabilityConfig();
|
||||
ConcurrentKafkaListenerContainerFactoryConfigurer configurer =
|
||||
mock(ConcurrentKafkaListenerContainerFactoryConfigurer.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
ConsumerFactory<Object, Object> consumerFactory = mock(ConsumerFactory.class);
|
||||
|
||||
ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
|
||||
config.kafkaListenerContainerFactory(configurer, consumerFactory,
|
||||
config.syslogDefaultErrorHandler());
|
||||
|
||||
assertEquals(ContainerProperties.AckMode.MANUAL_IMMEDIATE,
|
||||
factory.getContainerProperties().getAckMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
void rawListenerCommitsInsideAcknowledgmentForAccurateSlowBatchTiming() {
|
||||
KafkaReliabilityConfig config = new KafkaReliabilityConfig();
|
||||
ConcurrentKafkaListenerContainerFactoryConfigurer configurer =
|
||||
mock(ConcurrentKafkaListenerContainerFactoryConfigurer.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
ConsumerFactory<Object, Object> consumerFactory = mock(ConsumerFactory.class);
|
||||
DefaultErrorHandler errorHandler = config.syslogDefaultErrorHandler();
|
||||
|
||||
ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
|
||||
config.rawKafkaListenerContainerFactory(
|
||||
configurer, consumerFactory, errorHandler, 3);
|
||||
|
||||
assertEquals(ContainerProperties.AckMode.MANUAL_IMMEDIATE,
|
||||
factory.getContainerProperties().getAckMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
void largeListenerAlsoCommitsInsideAcknowledgment() {
|
||||
KafkaReliabilityConfig config = new KafkaReliabilityConfig();
|
||||
ConcurrentKafkaListenerContainerFactoryConfigurer configurer =
|
||||
mock(ConcurrentKafkaListenerContainerFactoryConfigurer.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
ConsumerFactory<Object, Object> consumerFactory = mock(ConsumerFactory.class);
|
||||
when(consumerFactory.getConfigurationProperties()).thenReturn(Collections.emptyMap());
|
||||
|
||||
ConcurrentKafkaListenerContainerFactory<Object, Object> factory =
|
||||
config.largeRawKafkaListenerContainerFactory(configurer, consumerFactory,
|
||||
config.syslogDefaultErrorHandler(), 1, 5, 33554432, 67108864);
|
||||
|
||||
assertEquals(ContainerProperties.AckMode.MANUAL_IMMEDIATE,
|
||||
factory.getContainerProperties().getAckMode());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user