当生产者向不存在的主题发出事件而禁用自动创建主题时会发生什么?

时间:2018-12-28 07:51:41

标签: apache-kafka

我已经看过文档的这一部分(source):

  

让我们用一个分区和一个副本创建一个名为“ test”的主题:

$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
     

如果我们运行list topic命令,我们现在可以看到该主题:

$ bin/kafka-topics.sh --list --zookeeper localhost:2181
test
     

或者,除了手动创建主题之外,您还可以将代理配置为在发布不存在的主题时自动创建主题。

我不清楚,如果未启用主题的自动创建功能,但制作人会向不存在的主题发出事件。它取决于客户端/库吗?什么是典型结果?

(在代码示例的情况下,我更喜欢Python)

1 个答案:

答案 0 :(得分:5)

当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客户端甚至不会发出此类事件,甚至会在此之前引发错误,因为元数据请求将更早失败。