Kafka MirrorMaker仅同步主题未同步消息,请求技术排查指引
排查Kafka MirrorMaker同步主题但无消息的问题
针对你遇到的Kafka 1.0.0 MirrorMaker能同步主题却无法同步消息的情况,我整理了几个实用的排查方向和解决方案:
1. 优先检查MirrorMaker运行日志
MirrorMaker的标准输出或日志文件会记录消费源集群消息、发送到目标集群的详细过程,这是最直接的排查入口:
- 启动MirrorMaker时可以指定日志配置,让日志更详细:
bin/kafka-run-class.sh kafka.tools.MirrorMaker --consumer.config config/consumer.config --producer.config config/producer.config --whitelist=".*" --log4j-options "-Dlog4j.configuration=file:./config/log4j.properties" - 重点查看是否有消费失败(比如源集群网络不通、权限不足)或发送失败(目标集群网络超时、主题配置不兼容)的报错信息,比如
TimeoutException或AuthorizationException。
2. 确认MirrorMaker的消费组是否正确消费了源集群消息
你的consumer配置里指定了group.id=test-consumer-group_3,可以在源集群执行以下命令,查看该消费组的offset状态:
bin/kafka-consumer-groups.sh --bootstrap-server source_broker_ip:9092 --describe --group test-consumer-group_3
- 检查
CURRENT-OFFSET是否和LOG-END-OFFSET一致,如果前者远小于后者,说明MirrorMaker的consumer没追上消息,可能是消费速度慢、源集群消息堆积,或者网络延迟过高。 - 如果根本看不到
u39主题的分区信息,说明whitelist规则没匹配到该主题,虽然你用了.*,但可以尝试显式指定--whitelist="u39"测试。
3. 验证目标集群的消费命令是否正确
你用了--zookeeper参数来消费,Kafka 1.0.0已经推荐使用--bootstrap-server连接broker,zookeeper方式可能存在元数据不同步的问题:
bin/kafka-console-consumer.sh --bootstrap-server dest_broker_ip:9092 --topic u39 --from-beginning
用这个命令重新尝试消费,避免因zookeeper元数据延迟导致看不到消息。
4. 排查跨AWS区域的网络与安全组限制
虽然主题能同步,但消息发送依赖稳定的网络连接:
- 确认运行MirrorMaker的机器能同时访问源集群和目标集群的9092端口:用
telnet source_broker_ip 9092和telnet dest_broker_ip 9092测试连通性。 - 检查AWS安全组配置:源集群的安全组是否允许MirrorMaker机器的IP访问9092端口;目标集群的安全组是否允许MirrorMaker机器的IP访问9092端口。跨区域网络容易出现防火墙或路由限制,这是常见的坑。
5. 调整Producer配置适配跨区域场景
你的producer配置针对跨区域场景有几个可以优化的点:
batch.size=100太小:跨区域网络延迟高,小批量会导致频繁发送,不仅效率低,还可能因超时导致消息堆积。建议调大到16384或32768。acks=1的风险:如果目标集群的主题副本数大于1,acks=1只保证leader写入成功,若leader挂掉且副本未同步,消息会丢失。可以临时改为acks=all测试,确认消息是否能到达目标集群。- 检查
retries的生效情况:如果日志里有大量重试记录,说明网络不稳定,可能需要调整request.timeout.ms(默认30000),适当延长超时时间,比如改为60000。
6. 对比源集群与目标集群的主题配置
MirrorMaker会自动同步主题的分区数、副本数等配置,但可能出现同步不一致的情况:
- 在源集群执行:
bin/kafka-topics.sh --describe --bootstrap-server source_broker_ip:9092 --topic u39 - 在目标集群执行相同命令,对比
PartitionCount、ReplicationFactor等参数,如果不一致,可能导致MirrorMaker发送消息失败。
7. 确认MirrorMaker是否自动订阅新主题
Kafka 1.0.0的MirrorMaker默认会自动发现新创建的主题,但如果你的consumer配置里没开启auto.offset.reset,可能导致新主题无法被消费。可以在consumer.config里添加:
auto.offset.reset=earliest
确保MirrorMaker消费新主题时从最开始的位置读取。
内容的提问来源于stack exchange,提问作者Ajay Misra
相关产品推荐
相关产品推荐

