【发布时间】:2019-05-23 11:03:21
【问题描述】:
我对使用 AdminClient createTopics 创建的主题有疑问。
在我的应用程序中,我有以下顺序:
- 创建具有 1 个分区的新主题,使用
AdminClient.createTopics将复制因子设置为 1 - 等待
AdminClient.createTopicsKafkaFuture结果 - 立即向新创建的主题发送一条新消息(通常操作 2 和 3 之间的时间约为 200 毫秒)。
我的代码如下:
adminClient
.createTopics(Collections.singleton(new NewTopic(targetTopic, 1, (short) 1)))
.values()
.get(targetTopic)
.get();
producer.send(new ProducerRecord<>(targetTopic, data));
生产者有时看不到创建的主题并抛出以下异常:
[Producer clientId=producer-1] 获取关联 ID 为 5 的元数据时出错:{targetTopic=UNKNOWN_TOPIC_OR_PARTITION}
[Producer clientId=producer-1] 在分区 targetTopic 的生产请求中收到未知主题或分区错误。主题/分区可能不存在,或者用户可能没有描述访问权限
这个问题非常罕见(
是否保证当AdminClient.createTopics Kafka 未来完成时,会创建主题并且 Kafka 生产者应该看到该主题?
如果不是,那么哪种主题创建方法可以给我这样的保证?
我在 Azure 上使用 kafka-clients:2.0.0 和 Kafka HD 服务。我的集群由 3 个 Zookeeper 和 3 个 Kafka 节点组成。
【问题讨论】:
标签: java apache-kafka