当前位置: 首页 > 知识库问答 >
问题:

Kafka producer在发送到通过AdminClient createTopics方法创建的主题时抛出“接收到的未知主题或分区错误”

刁丰羽
2023-03-14

我对使用AdminClient createTopics创建的主题有异议。在我的应用程序中,我有以下顺序:

  1. 创建具有1个分区的新主题,使用AdminClient.createTopics
  2. 将复制因子设置为1
  3. 等待AdminClient.create主题KafkaFuture结果
  4. 立即向新创建的主题发送新消息(通常操作2和3之间的时间约为200毫秒)。

我的代码如下:

adminClient
  .createTopics(Collections.singleton(new NewTopic(targetTopic, 1, (short) 1)))
  .values()
  .get(targetTopic)
  .get();
producer.send(new ProducerRecord<>(targetTopic, data));

制作人有时看不到创建的主题,并抛出以下异常:

[Producer clientId=Producer-1]获取相关id为5的元数据时出错:{targetTopic=UNKNOWN_TOPIC_或_PARTITION}

[Producer clientId=Producer-1]在targetTopic分区上的生成请求中收到未知主题或分区错误。主题/分区可能不存在,或者用户可能无权访问它

这个问题非常罕见(

是否保证当AdminClient.createTopicsKafka未来完成后,主题就被创建,Kafka生产者应该看到该主题?如果没有,那么哪种主题创建方法可以给我这样的保证?

我正在Azure上使用Kafka客户端:2.0.0和Kafka高清服务。我的集群由3个Zookeeper和3个Kafka节点组成。

共有1个答案

鞠边浩
2023-03-14

kafka客户端不保证原子主题的创建。您可以从这个留档中阅读。当您创建主题时,kafka会通知分布式系统关于主题的信息,以便操作在不同的机器上运行,如果没有分布式事务管理,这些操作就不能是原子的。

 类似资料:
  • 我对使用创建主题有问题。在我的申请中,我有以下顺序: 使用创建具有1个分区、复制因子设置为1的新主题 等待结果 立即向新创建的主题发送新消息(通常操作2和操作3之间的时间约为200毫秒)。 producer有时看不到创建的主题,并抛出以下异常: [Producer ClientID=Producer-1]获取相关id为5的元数据时出错:{targettopic=unknown_topic_or_p

  • 我正在学习使用Kafka在科特林的SpringKafka。我知道,当一个新主题发布时,如果不存在,它就会被创建。所以,当我向从Spring创建的新/旧主题发送一个值时,默认分区是0,但我想在另一个分区上写一条消息,比如分区1。 当我创建/写一个主题时,它是有效的: 但是,当我使用以下选项选择分区和密钥时: 我得到了以下错误: 我试着把钥匙换成,但也没用。显然,当我从Spring客户端创建一个主题时

  • 我正在使用以下脚本向特定用户发送通知: 脚本工作正常,但我如何向安装我的应用程序的所有用户发送通知。我在我的应用程序中创建了一个主题(警报),我可以通过Firebase控制台向所有用户发送通知。有人可以指导我更新上面的主题脚本吗?

  • 使用命令时: /usr/local/kafka/bin/kafka-topics.sh--创建--zookeeper localhost:2181--复制-因子1--分区1--主题测试 提前道谢。

  • 我对Kafka很陌生。我正在尝试发送一个消息到Kafka主题,其中包含头和有效载荷。 以下是错误: @PostMapping(value=“/publish”)public void sendMessageToKafkaTopic(@RequestBody CabLocationPayload CabLocationPayload){ Header和Payload具有JSON的映射字段。 在Pro

  • 我正在尝试Firebase通知API。当我从控制台向应用程序发送下游消息时,该服务工作得很好,但如何向主题注册用户发送消息呢? 我在Android端做的 但当我尝试从控制台向主题发送下游消息时,它说 编辑:我发现在映射主题后,需要1天才能在Firebase控制台中显示出来