我看过这部分文档(来源):
让我们创建一个名为"test"的主题,其中包含单个分区和只有一个副本:
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
如果我们运行列表主题命令,我们现在可以看到该主题:
$ bin/kafka-topics.sh --list --zookeeper localhost:2181 test
或者,除了手动创建主题外,您还可以将代理配置为在发布不存在的主题时自动创建主题。
我不清楚如果未启用主题的自动创建,但生产者向不存在的主题发出事件会发生什么。它是否取决于客户端/库?典型结果是什么?
(如果是代码示例,我更喜欢 Python)
当 Kafka 客户端(生产者或消费者)连接到引导服务器时,它做的第一件事就是元数据请求:它询问有关它想要生成或使用的主题分区的信息。如果禁用auto.create.topics.enable
,则会收到UNKNOWN_TOPIC_OR_PARTITION
错误,并且无法"使用"主题。例如,如果您尝试运行kafka-console-producer
工具,您将获得以下内容:
[2018-12-28 08:59:37,669] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {my_topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-12-28 08:59:37,768] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {my_topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-12-28 08:59:37,869] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 4 : {my_topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-12-28 08:59:37,971] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 5 : {my_topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-12-28 08:59:38,073] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 6 : {my_topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
这意味着 Kafka 客户端甚至不会发出这样的事件,而是在此之前抛出错误,因为元数据请求将更早失败。