当前位置: 代码网 > it编程>数据库>MsSqlserver > Doris报错:failed to send brpc when exchange的解决过程

Doris报错:failed to send brpc when exchange的解决过程

2025年11月06日 MsSqlserver 我要评论
doris 中出现 “failed to send brpc when exchange” 错误,通常与 doris 的分布式执行框架中 brpc 通信异常相关,主要发生在查询

doris 中出现 “failed to send brpc when exchange” 错误,通常与 doris 的分布式执行框架中 brpc 通信异常相关,主要发生在查询执行过程中不同节点(fe/be 或 be 之间)通过 exchange 算子传递数据时。

可能的原因及解决方案

1. 网络问题

节点间网络不通或延迟过高

  • 检查 be 节点之间的网络连通性(使用 pingtelnet 等工具)。
  • 查看网络是否存在丢包(mtrtraceroute 命令),高延迟或丢包会导致 brpc 通信超时。
  • 确保节点间防火墙规则允许 doris 通信端口(默认的 brpc 端口等)。

结果

  • ping是通的,telnet也是通的,防火墙没有开

2. brpc 配置不合理

  • 超时时间过短

be.conf 中适当调大 brpc 相关超时参数:

brpc_arrow_flight_work_pool_max_queue_size=-1
brpc_arrow_flight_work_pool_threads=-1
brpc_connection_check_timeout_ms=10000
brpc_heavy_work_pool_max_queue_size=-1
brpc_heavy_work_pool_threads=-1
brpc_idle_timeout_sec=-1
brpc_light_work_pool_max_queue_size=-1
brpc_light_work_pool_threads=-1
brpc_max_body_size=3147483648
brpc_num_threads=256
brpc_port=8060
brpc_socket_max_unwritten_bytes=-1
brpc_streaming_client_batch_bytes=262144
  • 连接数限制

检查是否因连接数过多导致失败,可调整 grpc_threadmgr_threads_nums 4096 等参数。

结果

3. 节点负载过高

be 节点内存/cpu 耗尽

  • 查看 be 节点的资源使用情况(topfree 命令),若内存不足可能导致 brpc 线程无法正常工作。
  • 临时减轻负载: kill 大查询任务,避免资源竞争。
  • 长期优化:增加 be 节点数量,或调整查询并发度(max_concurrent_queries)。

结果

  • 内存正常、cpu正常、磁盘io异常(使用iotop可以看到有很多basecompaction)

4. 数据倾斜或查询计划不合理

exchange 算子处理数据量过大

  • 某些查询可能因数据倾斜导致单个 exchange 节点需要处理远超预期的数据量,引发通信失败。
  • 优化 sql:检查是否有大表 join 未指定合理的分桶键,或聚合操作未做预聚合。
  • 查看查询计划:通过 explain 分析 exchange 算子的分布情况,调整分桶策略或 sql 写法。

结果

  • 大表分桶数量设置不合理

5. 节点状态异常

be 节点心跳异常或已下线

  • 检查 fe 控制台(http://fe_host:8030)的 “backends” 页面,确认所有 be 节点状态正常(alive)。
  • 若节点异常,尝试重启 be 服务:sh bin/stop_be.sh && sh bin/start_be.sh
  • 检查 be 日志(log/be.info),搜索 “brpc” 相关错误信息,定位具体故障节点。

结果

  • 节点都正常

6. 版本兼容性问题

若近期升级过 doris 版本,可能存在 brpc 协议不兼容的情况,建议:

  • 确认所有节点(fe/be)版本一致。
  • 参考官方升级文档,检查是否遗漏了某些配置项的更新。

结果

  • 不存在版本兼容问题

排查步骤建议

  1. 查看 fe 日志(log/fe.info)和对应 be 节点的日志(log/be.info),定位具体是哪个节点间的通信失败。
  2. 检查涉事节点的网络和资源状态。
  3. 针对频繁出现该错误的查询,优化其 sql 或表结构。
  4. 逐步调整 brpc 相关参数,观察是否改善。
  5. 通过be.info查看每个query的实例数量:

cat ./be.info |grep "total fragment num on current host"|awk '{print $1"-"$2,$6,$16,$23}'|awk -f '[ ,]' '$4>100 {print $0}'

上千的特别大概率都是不合理的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com