Java 卡夫卡制作人抛出;收到未知主题或分区错误“;发送到通过AdminClient createTopics方法创建的主题时

Java 卡夫卡制作人抛出;收到未知主题或分区错误“;发送到通过AdminClient createTopics方法创建的主题时,java,apache-kafka,Java,Apache Kafka,我对使用AdminClient createTopics创建的主题有异议。 在我的应用程序中,我有以下顺序: 使用AdminClient.createTopics 等待AdminClient.createTopicsKafkaFutureresult 立即向新创建的主题发送新消息(通常操作2和3之间的时间约为200毫秒) 我的代码如下: adminClient .createTopics(Collections.singleton(new NewTopic(targetTopic, 1, (

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

  • 使用
    AdminClient.createTopics
  • 等待
    AdminClient.createTopics
    KafkaFuture
    result
  • 立即向新创建的主题发送新消息(通常操作2和3之间的时间约为200毫秒)
  • 我的代码如下:

    adminClient
      .createTopics(Collections.singleton(new NewTopic(targetTopic, 1, (short) 1)))
      .values()
      .get(targetTopic)
      .get();
    producer.send(new ProducerRecord<>(targetTopic, data));
    
    adminClient
    .createTopics(Collections.singleton(新的NewTopic(targetTopic,1,(短)1)))
    .values()
    .get(目标)
    .get();
    生产商发送(新生产记录(targetTopic,数据));
    

    生产者有时看不到创建的主题,并引发以下异常:

    获取相关id为5的元数据时[Producer clientId=Producer-1]出错:{targetTopic=UNKNOWN\u TOPIC\u或\u PARTITION}

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

    此问题非常罕见(<0,1%的所有创建主题)

    AdminClient.createTopics
    Kafka future完成时,是否保证创建主题,并且Kafka制作人应该看到该主题? 如果没有,那么哪种主题创作方法可以给我这样的保证


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

    Kafka客户端不保证创建原子主题。你可以从这里读到。创建主题时,kafka将向分布式系统通知主题信息,以便操作在不同的机器上运行,如果没有分布式事务管理,这些机器就不能是原子的。

    谢谢您的回答,有没有任何机制可以保证主题是真的创建的?我正在考虑在Kafka broker上启用主题自动创建(出于安全原因,我不太想这样做),或者将复制因子值设置为等于节点数。我不知道这方面的任何机制,但您可以编写它。创建后,检查循环中的主题信息,如果信息正确,则断开循环执行下一步。但如果你能将主题的创建和发布步骤分开,我认为这会更好。