apache-kafka - 当生产者向不存在的主题发出事件并禁用主题的自动创建时会发生什么?
问题描述
我已经看过这部分文档(来源):
让我们创建一个名为“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)
解决方案
当 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 客户端甚至不会发出这样的事件,而是在此之前抛出错误,因为元数据请求会更早失败。
推荐阅读
- c# - 如何在两个日期选择器之间使用验证?
- php - 奇怪的雄辩行为:如果条件在 foreach 内,则不起作用
- php - Wordpress 使用查询作为 AJAX
- python - 评估 mpmath gammainc 函数的困难
- mongodb - 在 Golang 中的 mongodb 中插入结构
- netbeans-platform - 在资源管理器视图中删除节点而不是在 TopComponent 中
- pandas - pandas - 有条件地用其他行值填充空行值
- javascript - React Native - 将数据从一个组件传递到另一个
- laravel - 在 Laravel 中提交表单后,如何验证选择的单选按钮(多选)是否正确
- php - 如何在 CodeIgniter 框架中分离前端和管理?