我对使用 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节点组成。
1条答案
按热度按时间gcuhipw91#
Kafka客户机不保证原子主题的创建。您可以从本文档中阅读。当您创建一个主题时,kafka将通知分布式系统关于主题的信息,这样操作就可以在不同的机器上运行,如果没有分布式事务管理,这些机器就不能是原子的。