我将Spring用于Apache Kafka,并通过Spring的KafkaTemplate创建了一个使用Kafka Producer(org.apache.kafka.clients.producer)的服务,以将消息发送到主题。在目标Kafka群集上,我禁用了自动主题创建。使用此处列出的生产者配置的组合https://kafka.apache.org/documentation/#producerconfigs我成功控制了请求重试的次数,重试之间的时间等。
如果我提供的主题不存在,则请求会在我期望的时间超时(达到max.block.ms的值)时超时。但是,在超时之后,我继续以为retry.backoff.ms设置的时间间隔获取日志条目(例如下面的条目),直到达到300000 ms / 5分钟为止。
我一直无法确定可以更改生产者或代理上的哪个配置属性,以阻止生产者检查5分钟以查看该主题是否已创建。
有人可以指出我正确的设置,使我可以减少此设置,或者在请求超时后停止检查吗?
日志输入示例:
WARN [kafka-producer-network-thread | producer-1] org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater: [Producer clientId=producer-1] Error while fetching metadata with correlation id 9 : {<specified_topic>=UNKNOWN_TOPIC_OR_PARTITION}
使用的生产者配置:
Kafka Producer在first之前检索和缓存主题/分区元数据send
。然后,它将定期尝试刷新此元数据,每个metadata.max.age.ms
(默认值= 5分钟)刷新为“好retry.backoff.ms
”主题,每个刷新为“无效”主题。这些元数据刷新尝试就是您在日志中观察到的。
为了防止缓存不受控制地增长,根据这些源注释,在一定时间后会将未使用的主题从缓存中删除。当前,此有效期被硬编码ProducerMetadata.java
为5分钟。
public class ProducerMetadata extends Metadata {
private static final long TOPIC_EXPIRY_NEEDS_UPDATE = -1L;
static final long TOPIC_EXPIRY_MS = 5 * 60 * 1000;
...
通过将生产者日志级别设置为,您实际上可以观察到所有这些活动DEBUG
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句