kafka生产者在发送到通过adminclient createtopics方法创建的主题时抛出“接收到未知主题或分区错误”

ivqmmu1c  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(437)

我对使用 AdminClient createTopics . 在我的应用程序中,我有以下顺序:
创建分区为1的新主题,复制因子设置为1,使用 AdminClient.createTopics 等等
AdminClient.createTopics KafkaFuture 结果
立即向新创建的主题发送新消息(通常操作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\u topic\u或\u partition}
[producer clientid=producer-1]在分区targettopic上的生成请求中收到未知主题或分区错误。主题/分区可能不存在,或者用户可能无权访问它
这个问题非常罕见(<0.1%的主题都是创建的)。
保证什么时候 AdminClient.createTopics Kafka的未来完成了,然后主题被创建,Kafka制作人应该看到这个主题吗?如果没有,那么哪种主题创作方法能给我这样的保证呢?
我在用Kafka-clients:2.0.0 and azure上的kafka hd服务。我的集群由3个zookeeper和3个kafka节点组成。

gcuhipw9

gcuhipw91#

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

相关问题