首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kafka在属性文件中创建了比硬编码更多的分区。

Kafka在属性文件中创建了比硬编码更多的分区。
EN

Stack Overflow用户
提问于 2022-01-24 08:32:58
回答 2查看 333关注 0票数 2

我已将我的生产者配置为:

代码语言:javascript
复制
spring.cloud.stream.bindings.pc-abc-out-0.destination=pc-abc-my-topic
spring.cloud.stream.bindings.pc-abc-out-0.producer.partition-count=5
spring.cloud.stream.bindings.pc-abc-out-0.producer.header-mode=headers
spring.cloud.stream.bindings.pc-abc-out-0.producer.partition-count=10
spring.cloud.stream.bindings.pc-abc-out-0.producer.partitionKeyExpression=payload.key
spring.cloud.stream.kafka.bindings.pc-abc-out-0.producer.sync=true

然而,在kafka日志中,我一直得到错误:

代码语言:javascript
复制
o.s.kafka.support.LoggingProducerListener - Exception thrown when sending a message with key='byte[14]' and payload='byte[253]' to *topic pc-abc-my-topic and partition 8*: org.apache.kafka.common.errors.TimeoutException: Topic pc-abc-my-topic not present in metadata after 60000 ms.

错误消息中的亮点是:主题pc-abc我的主题和分区8

为什么它要寻找分区8,即使我已经将分区数定义为5,不应该在0-4之间编号。我还有几条分区号超过5的其他错误消息。

在我前面的配置中,我添加了

代码语言:javascript
复制
spring.cloud.stream.kafka.binder.auto-add-partitions=true

但我删除了它,我们缩小了规模,扩大了服务范围。这个问题仍然存在。这是陈腐配置的情况吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-27 14:17:39

事实证明,问题是这种配置:

代码语言:javascript
复制
spring.cloud.stream.bindings.pc-abc-out-0.producer.partitionKeyExpression=payload.key
spring.cloud.stream.kafka.bindings.pc-abc-out-0.producer.sync=true

由于payload.key而计算的分区数大约比我们在基础结构上配置和创建的partitionCount值要大。删除这两种配置将停止此问题。

票数 1
EN

Stack Overflow用户

发布于 2022-01-24 13:49:53

我猜您首先用8个分区创建了主题。如果主题已经存在,春季-卡夫卡没有创建新的一个与您的分区吐露。

这里是https://docs.spring.io/spring-cloud-stream/docs/Brooklyn.RELEASE/reference/html/_apache_kafka_binder.html#:~:text=Default%3A%20Empty%20map.-,The,-Kafka%20binder%20will医生

--卡夫卡绑定器--将使用生产者的partitionCount设置作为提示,用给定的分区计数创建一个主题(与minPartitionCount一起使用,两者中的最大值为所使用的值)。在为绑定程序配置minPartitionCount和为应用程序配置partitionCount时都要小心,因为将使用更大的值。如果主题已经存在,且分区数较小,并且禁用了autoAddPartitions (默认),则绑定程序将无法启动。

如果主题已经存在,且分区数量较小,并且启用了autoAddPartitions,则将添加新的分区。如果一个主题的分区数量已经超过最大值(minPartitionCount和partitionCount),则将使用现有的分区计数.

您真正的问题是主题problem在60000 ms后没有出现在元数据中。并不关心分区计数。

这里解决了这个问题

org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata after 60000 ms

https://developpaper.com/topic-xxx-not-present-in-metadata-after-60000-ms/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70830969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档