调用 org.apache.kafka.clients.admin.AdminClient#describeTopics
方法,发现频繁报 'Timed out waiting to send the call'
的错误,经过源码分析,是因为服务端经过 defaultTimeoutMs(默认120秒)时间没有响应给客户端,锁报了这个错,客户端会将请求封装成一个 Call 对象,并放到 AdminClientRunnable 中的 newCalls 集合中,初始化时会启动一条线程去执行。
那么想问下什么情况下会导致这个问题频繁出现呢?
kafka版本:2.2.1
org.apache.kafka.clients.admin.KafkaAdminClient#describeTopics
runnable.call(new Call("describeTopics", calcDeadlineMs(now, options.timeoutMs()),
new ControllerNodeProvider()) {
// ...
}
org.apache.kafka.clients.admin.KafkaAdminClient#calcDeadlineMs
private long calcDeadlineMs(long now, Integer optionTimeoutMs) {
if (optionTimeoutMs != null)
return now + Math.max(0, optionTimeoutMs);
return now + defaultTimeoutMs;
}
org.apache.kafka.clients.admin.KafkaAdminClient.AdminClientRunnable#timeoutCallsToSend
private int timeoutCallsToSend(TimeoutProcessor processor) {
int numTimedOut = 0;
for (List<Call> callList : callsToSend.values()) {
numTimedOut += processor.handleTimeouts(callList,
"Timed out waiting to send the call.");
}
if (numTimedOut > 0)
log.debug("Timed out {} call(s) with assigned nodes.", numTimedOut);
return numTimedOut;
}
这个问题解决了吗?
你的答案