我在spring boot微服务中使用spring cloud stream Kafka sync producer。每次我们部署服务时,第一次调用kafka需要20多秒才能将消息发布到Topic。但是所有后续调用都需要3到4毫秒。此问题也是随机发生的,并且是间歇性的,但主要发生在我们重新启动服务时。 我们正在使用kafka版本0.9.0.1和gradle依赖项,如下所示 依赖性{
compile('org.springframework.cloud:spring-cloud-starter-stream-kafka')
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR3"
}
}
这是应用程序。 YML
spring:
cloud:
stream:
bindings:
output:
content-type: application/json
destination: SOPOrderReceiveTopic
kafka:
binder:
brokers: "localhost:9092,localhost:9093"
headers: eventType
requiredAcks: -1
zkNodes: "localhost:2181"
bindings:
output:
producer:
configuration:
max:
block:
ms: 20000
reconnect:
backoff:
ms: 5000
request:
timeout:
ms: 30000
retries: 3
retry:
backoff:
ms: 10000
timeout:
ms: 30000
sync: true
我使用org.springframework.cloud.stream.messaging.Source作为输出通道,这是用于发布消息的方法
public void publish(Message event) {
try {
boolean result = source.output().send(event, orderEventConfig.getTimeoutMs());
logger.log(LoggingEventType.INFORMATION, "MESSAGE SENT TO KAFKA : " + result);
} catch (Exception publishingExceptionMessage) {
logger.log(LoggingEventType.ERROR, "publish event to kafka failed!", publishingExceptionMessage);
throw new PublishEventException("publish event to kafka failed for eventPayload: " + event.getPayload(),
ThreadVariables.getTenantId());
}
}
我知道同步生成器的性能条件较慢,因为它保证了消息的顺序和持久性,但为什么只有第一个请求需要这么长时间?这是一个已知的问题吗?它是在最新的kafka版本中修复的。可以有人建议。感谢
答案 0 :(得分:0)
看起来使用以下依赖项下载的Spring云流版本存在问题,
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR3"
}
尝试升级Spring云流并检查。它应该在springboot服务启动后修复kafka服务器上第一次发布调用的延迟。
dependencies {
compile('org.springframework.cloud:spring-cloud-stream-binder-kafka')
}
ext { springCloudVersion = 'Dalston.RELEASE' }
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}