Kafka Connect上MM2遇DisconnectException后单主题复制停滞问题排查
MM2主题复制延迟增长后自行恢复的问题分析
问题背景
部署3个Kafka Connect节点运行MirrorMaker2(MM2)任务,将远程UK和US集群的4个主题复制至单个UK Kafka集群。多数场景运行正常,但某一时刻出现单个主题复制延迟持续增长的情况,延迟增长时间与日志报错时间完全吻合(图表偏移+3)。
关联报错日志
[2023-10-21 05:05:56,820] INFO [mm2-msc-us-dc1-2-live|task-19] [Consumer clientId=mm2-us-dc1-2-live->mm2-kafka|mm2-msc-us-dc1-2-live-19|replication-consumer, groupId=null] Disconnecting from node 895 due to request timeout. (org.apache.kafka.clients.NetworkClient:836) [2023-10-21 05:05:56,821] INFO [mm2-msc-us-dc1-2-live|task-19] [Consumer clientId=mm2-us-dc1-2-live->mm2-kafka|mm2-msc-us-dc1-2-live-19|replication-consumer, groupId=null] Cancelled in-flight FETCH request with correlation id 1215447 due to node 895 being disconnected (elapsed time since creation: 30025ms, elapsed time since send: 30025ms, request timeout: 30000ms) (org.apache.kafka.clients.NetworkClient:344) [2023-10-21 05:05:56,821] INFO [mm2-msc-us-dc1-2-live|task-19] [Consumer clientId=mm2-us-dc1-2-live->mm2-kafka|mm2-msc-us-dc1-2-live-19|replication-consumer, groupId=null] Error sending fetch request (sessionId=1799400446, epoch=1214974) to node 895: (org.apache.kafka.clients.FetchSessionHandler:615) org.apache.kafka.common.errors.DisconnectException
问题原因拆解
1. 延迟增长的直接触发点
日志中的DisconnectException和请求超时提示,说明MM2的复制消费者与源US集群的broker节点895之间出现了网络连接超时或中断:消费者发送的FETCH请求超过30秒未收到响应,客户端主动断开了与该节点的连接,导致该主题的数据无法正常拉取,延迟开始累积。
2. 仅单个主题受影响的原因
- MM2的复制任务按主题/分区分片分配,task-19单独负责这个出问题的主题,其他主题由不同的task实例处理,对应的broker连接未出现异常,因此不受影响。
- 该主题的所有分区leader恰好都部署在节点895上,当这个节点连接异常时,该主题的所有数据拉取请求都无法正常完成,而其他主题的分区leader位于其他正常节点,复制流程不受干扰。
3. 1.5小时后自行恢复的原因
- 源集群节点895可能出现了临时性性能瓶颈:比如JVM长时间GC停顿、磁盘IO负载过高、跨区域网络临时抖动等问题,1.5小时后节点性能恢复正常,网络连接重新建立,MM2消费者通过内置的重试机制恢复FETCH请求,主题复制逐步回到正常状态。
- 源集群可能触发了分区leader自动选举:将该主题的分区leader切换到了其他健康的broker节点,后续MM2消费者连接新的leader节点后,恢复数据拉取,延迟逐步回落。
内容的提问来源于stack exchange,提问作者Penkov Vladimir
相关产品推荐
相关产品推荐

