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
resultadminClient
.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上启用主题自动创建(出于安全原因,我不太想这样做),或者将复制因子值设置为等于节点数。我不知道这方面的任何机制,但您可以编写它。创建后,检查循环中的主题信息,如果信息正确,则断开循环执行下一步。但如果你能将主题的创建和发布步骤分开,我认为这会更好。