我正在使用 Spring for Apache Kafka,并创建了一个服务,该服务通过 Spring 的 KafkaTemplate 使用 Kafka Producer (org.apache.kafka.clients. Producer) 将消息发送到某个主题。在目标 Kafka 集群上,我禁用了自动主题创建。使用此处列出的生产者配置的组合https://kafka.apache.org/documentation/# Producerconfigs我成功地控制了请求重试的次数、重试之间的时间等。
如果我提供的主题不存在,则请求会在我期望的时间超时(达到最大块时间)。但是,超时后,我继续按照设置的时间间隔获取日志条目(例如下面的条目)重试.退避.ms until 300000 毫秒/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}
使用的生产者配置:
- 交付.超时.ms = 5000
- 延迟时间 = 1000
- 最大块毫秒 = 8000
- 请求超时.ms=4000
- 最大重试次数 = 0
- 重试.backoff.ms = 2000
Kafka Producer 在第一次之前检索并缓存主题/分区元数据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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)