- 修复 Kafka Listener 并发配置包含尾部空格时触发 NumberFormatException 的问题
- 移除 SysLogProcessor 注解中对并发配置的直接字符串解析 - 改由 Kafka 容器工厂统一处理并发度配置 - 统一两个 consumer 模块各环境的并发配置格式 - 清理 application.properties 中可能影响类型转换的行尾空格 - 更新 Kafka 监听器拓扑回归测试,防止问题再次引入
This commit is contained in:
+1
-2
@@ -117,8 +117,7 @@ public class SysLogProcessor {
|
||||
"${syslog.reliability.retry-10m-topic:${spring.kafka.consumer.topic}.RETRY.10M}",
|
||||
"${syslog.reliability.retry-1h-topic:${spring.kafka.consumer.topic}.RETRY.1H}",
|
||||
"${syslog.reliability.replay-topic:${spring.kafka.consumer.topic}.REPLAY}"
|
||||
},
|
||||
concurrency = "${spring.kafka.listener.concurrency}" // 单体部署时仍由配置控制并发度
|
||||
}
|
||||
)
|
||||
public void consumeAndParallelProcess(List<ConsumerRecord<String, String>> records, Acknowledgment ack) {
|
||||
// [流程节点4] 批量 poll 后按记录顺序处理,避免后面的成功记录越过前面的失败记录推进 offset。
|
||||
|
||||
@@ -55,7 +55,7 @@ mybatis-plus.type-handlers-package=com.Modules.etl.handler
|
||||
spring.kafka.consumer.bootstrap-servers=192.168.4.99:9092
|
||||
spring.kafka.consumer.group-id=test-group
|
||||
spring.kafka.consumer.auto-offset-reset=latest
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.auto-commit-interval=1000
|
||||
spring.kafka.consumer.topic=test-topic
|
||||
|
||||
@@ -67,7 +67,7 @@ spring.kafka.consumer.properties.session.timeout.ms=45000
|
||||
#spring.kafka.consumer.value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
|
||||
spring.kafka.consumer.fetch-min-size= 1048576
|
||||
spring.kafka.listener.ack-mode= manual
|
||||
spring.kafka.listener.concurrency= 2
|
||||
spring.kafka.listener.concurrency=2
|
||||
spring.kafka.listener.type=batch
|
||||
|
||||
# 定时任务配置
|
||||
@@ -136,7 +136,7 @@ spring.datasource.hikari.idle-timeout=600000
|
||||
spring.datasource.hikari.max-lifetime=900000
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
|
||||
spring.datasource.hikari.validation-timeout=5000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.pool-name=HikariPool-SyslogConsumer-dev
|
||||
spring.datasource.hikari.auto-commit=false
|
||||
|
||||
|
||||
+3
-3
@@ -59,7 +59,7 @@ spring.kafka.consumer.bootstrap-servers=10.150 81.211:9092
|
||||
# 不会把同一消息复制给两个不同职责的服务;应使用不同 group-id,或拆成 raw/normalized 两级 Topic。
|
||||
spring.kafka.consumer.group-id=agent-syslog-group
|
||||
spring.kafka.consumer.auto-offset-reset=latest
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.auto-commit-interval=1000
|
||||
spring.kafka.consumer.topic=agent-syslog-topic
|
||||
|
||||
@@ -70,7 +70,7 @@ spring.kafka.consumer.properties.session.timeout.ms=45000
|
||||
|
||||
spring.kafka.consumer.fetch-min-size= 1048576
|
||||
spring.kafka.listener.ack-mode= manual
|
||||
spring.kafka.listener.concurrency= 2
|
||||
spring.kafka.listener.concurrency=2
|
||||
spring.kafka.listener.type=batch
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ spring.datasource.hikari.idle-timeout=600000
|
||||
spring.datasource.hikari.max-lifetime=900000
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
|
||||
spring.datasource.hikari.validation-timeout=5000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.pool-name=HikariPool-SyslogConsumer
|
||||
spring.datasource.hikari.auto-commit=false
|
||||
|
||||
|
||||
+2
-2
@@ -73,7 +73,7 @@ spring.kafka.consumer.properties.session.timeout.ms=45000
|
||||
#spring.kafka.consumer.value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
|
||||
spring.kafka.consumer.fetch-min-size= 1048576
|
||||
spring.kafka.listener.ack-mode= manual
|
||||
spring.kafka.listener.concurrency= 2
|
||||
spring.kafka.listener.concurrency=2
|
||||
spring.kafka.listener.type=batch
|
||||
|
||||
# 定时任务配置
|
||||
@@ -142,7 +142,7 @@ spring.datasource.hikari.idle-timeout=600000
|
||||
spring.datasource.hikari.max-lifetime=900000
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
|
||||
spring.datasource.hikari.validation-timeout=5000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.pool-name=HikariPool-SyslogConsumer
|
||||
spring.datasource.hikari.auto-commit=false
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ spring.kafka.consumer.bootstrap-servers=192.168.4.99:9092
|
||||
# 活跃原始日志由 syslog-consumer-rule 的 agent-01-syslog-topic 多节点消费。
|
||||
spring.kafka.consumer.group-id=agent-syslog-group
|
||||
spring.kafka.consumer.auto-offset-reset=latest
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.auto-commit-interval=1000
|
||||
spring.kafka.consumer.topic=agent-syslog-topic
|
||||
# 客户已确认:当前生产的活跃原始日志由 syslog-consumer-rule 多节点消费。
|
||||
@@ -78,7 +78,7 @@ spring.kafka.consumer.properties.session.timeout.ms=45000
|
||||
|
||||
spring.kafka.consumer.fetch-min-size= 1048576
|
||||
spring.kafka.listener.ack-mode= manual
|
||||
spring.kafka.listener.concurrency= 2
|
||||
spring.kafka.listener.concurrency=2
|
||||
spring.kafka.listener.type=batch
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ spring.datasource.hikari.idle-timeout=600000
|
||||
spring.datasource.hikari.max-lifetime=900000
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
|
||||
spring.datasource.hikari.validation-timeout=5000
|
||||
spring.datasource.hikari.leak-detection-threshold=300000
|
||||
spring.datasource.hikari.leak-detection-threshold=300000
|
||||
spring.datasource.hikari.pool-name=HikariPool-SyslogConsumer
|
||||
spring.datasource.hikari.auto-commit=false
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ spring.kafka.consumer.bootstrap-servers=192.168.4.99:9092
|
||||
# 不会把同一消息复制给两个不同职责的服务;应使用不同 group-id,或拆成 raw/normalized 两级 Topic。
|
||||
spring.kafka.consumer.group-id=agent-syslog-group
|
||||
spring.kafka.consumer.auto-offset-reset=latest
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.enable-auto-commit=false
|
||||
spring.kafka.consumer.auto-commit-interval=1000
|
||||
spring.kafka.consumer.topic=agent-syslog-topic
|
||||
# 保留单体部署能力;当前生产 profile 会覆盖为 false,不参与活跃原始 Topic 消费。
|
||||
@@ -98,7 +98,7 @@ spring.kafka.consumer.properties.session.timeout.ms=45000
|
||||
|
||||
spring.kafka.consumer.fetch-min-size= 1048576
|
||||
spring.kafka.listener.ack-mode= manual
|
||||
spring.kafka.listener.concurrency= 2
|
||||
spring.kafka.listener.concurrency=2
|
||||
spring.kafka.listener.type=batch
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ spring.datasource.hikari.idle-timeout=600000
|
||||
spring.datasource.hikari.max-lifetime=900000
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
|
||||
spring.datasource.hikari.validation-timeout=5000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.leak-detection-threshold=30000
|
||||
spring.datasource.hikari.pool-name=HikariPool-SyslogConsumer
|
||||
spring.datasource.hikari.auto-commit=false
|
||||
|
||||
|
||||
+2
-1
@@ -23,6 +23,7 @@ class SyslogKafkaTopologyTest {
|
||||
assertEquals("syslog-consumer-raw", listener.id());
|
||||
assertEquals("${spring.kafka.consumer.group-id}", listener.groupId());
|
||||
assertEquals("${syslog.raw-consumer.enabled:true}", listener.autoStartup());
|
||||
assertEquals("${spring.kafka.listener.concurrency}", listener.concurrency());
|
||||
// 并发度交给容器工厂的类型化配置处理,禁止在注解中直接 parseInt 原始字符串。
|
||||
assertEquals("", listener.concurrency());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user