Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Java Apache Kafka Producer元数据更新程序&;重试逻辑_Apache Kafka_Kafka Producer Api - Fatal编程技术网

Apache kafka Java Apache Kafka Producer元数据更新程序&;重试逻辑

Apache kafka Java Apache Kafka Producer元数据更新程序&;重试逻辑,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我正在为ApacheKafka使用Spring,并创建了一个服务,通过Spring的KafkaTemplate使用Kafka生产者(org.Apache.Kafka.clients.Producer)向主题发送消息。在目标Kafka群集上,我已禁用自动主题创建。使用此处列出的生产者配置组合,我可以成功地控制请求的重试次数、重试间隔时间等 如果我提供的主题不存在,请求将在我预期的时间超时(在达到max.block.ms的值时)。但是,在超时后,我将继续以设置的时间间隔获取日志条目(如下面的条目),

我正在为ApacheKafka使用Spring,并创建了一个服务,通过Spring的KafkaTemplate使用Kafka生产者(org.Apache.Kafka.clients.Producer)向主题发送消息。在目标Kafka群集上,我已禁用自动主题创建。使用此处列出的生产者配置组合,我可以成功地控制请求的重试次数、重试间隔时间等

如果我提供的主题不存在,请求将在我预期的时间超时(在达到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}
WARN[kafka producer-network thread | producer-1]org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater:[producer-clientId=producer-1]获取相关id为9的元数据时出错:{=UNKNOWN_-TOPIC_或_-PARTITION}
使用的生产者配置:

  • delivery.timeout.ms=5000
  • linger.ms=1000
  • 最大block.ms=8000
  • request.timeout.ms=4000
  • 最大重试次数=0
  • retry.backoff.ms=2000

Kafka Producer在第一次
发送之前检索并缓存主题/分区元数据。然后,它会定期尝试刷新此元数据,对于“良好”主题,每刷新一次(默认值为5分钟),对于“无效”主题,每刷新一次
重试.backoff.ms
。这些元数据刷新尝试是您在日志中观察到的

为了防止缓存无法控制地增长,未使用的主题会在一段时间后根据这些规则从缓存中删除。目前,该有效期硬编码为5分钟

  public class ProducerMetadata extends Metadata {
      private static final long TOPIC_EXPIRY_NEEDS_UPDATE = -1L;
      static final long TOPIC_EXPIRY_MS = 5 * 60 * 1000;
        ...

通过将producer log level设置为
DEBUG
,您实际上可以观察所有这些活动

未知主题或分区
。。。请描述此主题以证明其存在。如果它不存在,你为什么要尝试去创造它?为什么制作人应该停止尝试发送给它?你能展示一下你提供给制作人和经纪人的配置吗?@FatemaSagar更新了post@cricket_007我正在开发一个企业服务,它将通过http请求接收来自不同客户端的一条或多条消息,并将这些消息发送到kafka集群和提供的主题在请求中。客户端将无法创建新主题,并且可能会在向此服务发送的请求中意外传递无效/不存在的主题。您使用的客户端版本是什么?我在本周早些时候的文档中遇到了metadata.max.age.ms,并尝试了它,但没有结果。我在你的帖子后再次尝试将其设置为10000。制作人继续记录条目5分钟。metadata.max.age.ms似乎对行为没有影响。@hendpro12是的,你说得对!感谢您再次检查并分享结果!。我进一步挖掘并更新了我的答案。元数据主题expiry现在可以在2.5版本中配置。使用metadata.max.idle.ms作为默认值(5分钟)。