MirrorMaker2无法同步compact类型Kafka主题的全部消息,如何解决?
问题猜测验证
你的猜测完全符合MM2的默认运行逻辑,结论正确。
MM2的MirrorSourceConnector默认开启了同批次同key消息去重优化:当同一消费批次内出现同一个key的多条记录时,只会保留该key在批次内的最后一条记录,目的是降低compact主题同步时的无效写放大。
你遇到的场景刚好触发了该逻辑:如果同批次内同一个key先写入非null值,后续跟着对应null值墓碑消息,那么前面的非null值会被直接过滤,不会同步到目标集群。而主题Z无重复key,自然不会触发去重,数据量完全匹配。
全量同步配置方案
如果需要完全复刻源端所有事件(含墓碑消息)实现事件溯源类场景的同步,需要修改以下配置:
连接器核心配置修改
在MirrorSourceConnector的配置中添加/调整以下参数:
- 关闭同批次去重优化:
mirror.source.deduplicate = false,该参数默认值为true,关闭后会同步所有拉取到的记录,不会丢弃同key的历史消息 - 调大源端消费者接收缓冲区:
receive.buffer.bytes = 65536,你当前的8192配置过小,容易出现频繁拉取小批次,提升同key消息落入同一批次的概率 - 保证消息可靠性:添加
sink.producer.acks = all、sink.producer.enable.idempotence = true、sink.producer.max.in.flight.requests.per.connection = 5,避免同步过程中丢消息或乱序
目标端主题配置调整
如果不需要目标端也执行compact清理,建议单独覆盖目标主题的配置:
log.cleanup.policy = delete,避免目标端compact后清理掉同key的历史事件log.retention.ms = -1(或者按你的业务保留周期配置),确保所有事件长期留存
可选配置
如果需要同步消费者组位移,添加sync.offsets.enabled = true,保证跨集群消费的位移一致性
内容的提问来源于stack exchange,提问作者imalik8088
相关产品推荐
相关产品推荐

