从RedHat 7迁移至RedHat 8时Kafka崩溃问题求助
RHEL7迁移至RHEL8后librdkafka线程创建失败问题排查方案
问题现象
程序启动时触发以下错误并出现core dump:
configuring ... starting ... endpointUrl = opc.tcp://LBA:9681/POO.S2K/OPCUA/DataAccess == Info: Trying 10.119.0.247:8090... == Info: TCP_NODELAY set %2|1662467686.094|THREAD|rdkafka#consumer-1| [thrd:app]: Unable to create broker thread: Operation now in progress (115) %3|1662467686.094|ERROR|rdkafka#consumer-1| [thrd:app]: Unable to create broker thread: Operation now in progress (115) nbdtmdp: /home/deploy/nbdtmdp/build/src/librdkafka/librdkafka-prefix/src/librdkafka/src/rdkafka_broker.c:4773: rd_kafka_broker_add_logical: Assertion `rkb && *"failed to create broker thread"' failed. ./nbdtmdp_start.sh: line 7: 110235 Aborted (core dumped) ./nbdtmdp ../config/nbdtmdpCfg.txt
排查与解决步骤
适配librdkafka版本
RHEL8的系统库(glibc、pthread等)与RHEL7存在兼容性差异,旧版librdkafka可能未适配。在RHEL8环境重新编译最新稳定版librdkafka,编译时指定系统原生头文件与库路径,避免依赖旧版兼容组件。调整线程资源限制
检查当前用户线程数限制:ulimit -u,若数值过低,修改/etc/security/limits.conf添加:<你的用户名> soft nproc 65535 <你的用户名> hard nproc 65535重启会话后生效,再尝试启动程序。
排查pthread行为差异
RHEL8中pthread_create的错误码处理逻辑有调整,Operation now in progress (115)对应EINPROGRESS,可能是librdkafka未正确处理异步线程创建场景。查看rd_kafka_broker_add_logical函数的线程创建逻辑,适配RHEL8的pthread行为,或改用线程池模式替代动态线程创建。检查SELinux策略
RHEL8默认SELinux严格模式可能阻止程序创建线程。临时关闭SELinux测试:setenforce 0,若程序恢复正常,需添加自定义SELinux规则允许该程序的线程创建操作,或调整SELinux为宽容模式。确保编译环境一致
不要直接复用RHEL7的编译产物,在RHEL8上重新编译整个项目,使用系统原生gcc版本,避免因ABI不兼容导致的底层调用失败。
内容的提问来源于stack exchange,提问作者BAKYAC
相关产品推荐
相关产品推荐

