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

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

杜楚
2023-03-14

我对使用AdminClient CreateTopics创建主题有问题。在我的申请中,我有以下顺序:

  1. 使用AdminClient.CreateTopics
  2. 创建具有1个分区、复制因子设置为1的新主题
  3. 等待AdminClient.CreateTopicsKafKafuture结果
  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有时看不到创建的主题,并抛出以下异常:

[Producer ClientID=Producer-1]获取相关id为5的元数据时出错:{targettopic=unknown_topic_or_partition}

[Producer ClientID=Producer-1]在分区TargetTopic得Product请求中收到未知主题或分区错误.主题/分区可能不存在,或者用户可能没有对它的description访问权限

是否保证在AdminClient.CreateTopicsKafka future完成时创建主题,并且Kafka producer应该看到该主题?如果不是,那么哪种话题创作方法能给我这样的保证呢?

我正在使用Azure上的Kafka-Clients:2.0.0和Kafka HD服务。我的集群由3个Zookeeper和3个Kafka节点组成。

共有1个答案

罗淮晨
2023-03-14

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

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

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

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

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

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

  • 我是Kafka的新手,当我试图发送信息到我得到的主题下面的错误。有人能帮我一下吗? [2018-09-23 13:37:56,613]警告[Producer Clientid=Console-Producer]无法建立到节点-1的连接。代理可能不可用。(org.apache.kafka.clients.NetworkClient)