为何Kafka生产者指定不存在的Partition仍能正常发送消息?
Kafka指定不存在分区号时的行为说明
首先明确:Kafka不会自动创建你指定的不存在的分区。
你遇到消息能正常发送消费的情况,是因为生产者客户端(比如你使用的JS客户端)做了容错处理:当指定的分区号大于等于主题实际的分区数时,客户端会自动用指定的分区号对主题的实际分区数取模,将消息路由到一个有效的、已存在的分区上。
举个例子:如果my-topic实际只有3个分区(编号0、1、2),你指定分区号200,200对3取模结果为2,消息就会被发送到分区2,自然能正常消费。
你可以用Kafka命令行工具验证主题的实际分区情况:
kafka-topics.sh --describe --topic my-topic --bootstrap-server <你的Kafka服务地址>
执行后会看到主题的真实分区数量,不会出现编号为200的分区。
内容的提问来源于stack exchange,提问作者Esgaroth
相关产品推荐
相关产品推荐

