Kafka Producer报错:无法向只读镜像主题追加记录,求排查方案
问题分析与解决
问题原因
报错Cannot append records to read-only mirror topic明确说明:你要写入的hello-topic是Kafka镜像主题(由MirrorMaker/MirrorMaker 2.0创建的跨集群同步主题),这类主题设计为只读,仅用于接收源集群同步过来的数据,不允许本地生产者直接写入。这也是消费者能正常读取(镜像主题会同步源集群的消息),但生产者写入失败的核心原因。
解决方案
1. 确认主题属性
先通过Kafka命令行工具验证主题类型,执行以下命令:
kafka-topics.sh --describe --topic hello-topic --bootstrap-server <你的Kafka Broker地址>
如果输出中包含mirror.topic=true或MirrorMaker相关配置标识,即可确认这是镜像主题。
2. 使用普通主题写入(推荐方案)
镜像主题不适合作为本地生产者的写入目标,建议创建新的普通主题用于本地消息生产:
- 创建主题(通过命令行或Kafka管理工具):
kafka-topics.sh --create --topic hello-topic-local --bootstrap-server <你的Kafka Broker地址> --partitions 1 --replication-factor 1
- 修改生产者代码中的主题名称:
@GetMapping("/send") public ResultVo send(@RequestParam(value = "content") String content) { return new ResultVo(kafkaTemplate.send("hello-topic-local", 0, "test", content)); }
- 若需要消费该新主题的消息,同步修改消费者代码:
@KafkaListener(topics = "hello-topic-local", groupId = "hello-group") public void handleMessage(String content) { log.info("{}", content); }
3. 调整镜像主题配置(不推荐)
如果业务场景确实需要向镜像主题写入,可修改MirrorMaker的配置关闭目标主题的只读限制,但这种操作会破坏跨集群数据同步的一致性,可能导致数据混乱,仅在特殊场景下考虑使用。
内容的提问来源于stack exchange,提问作者LIANJI LI
相关产品推荐
相关产品推荐

