GitHub下载了librdkafka 1.8.0代码,使用example程序的producer.c文件进行测试,dr_msg_cb回调函数内标识会自动清空rkmessage,但是测试发现并没有自动清掉。
/*
每条消息调用一次该回调函数,说明消息是传递成功(rkmessage->err == RD_KAFKA_RESP_ERR_NO_ERROR)
还是传递失败(rkmessage->err != RD_KAFKA_RESP_ERR_NO_ERROR)
该回调函数由rd_kafka_poll()触发,在应用程序的线程上执行
*/
static void dr_msg_cb(rd_kafka_t *rk,
const rd_kafka_message_t *rkmessage, void *opaque){
if(rkmessage->err)
fprintf(stderr, "%% Message delivery failed: %s\n",
rd_kafka_err2str(rkmessage->err));
else
fprintf(stderr,
"%% Message delivered (%zd bytes, "
"partition %"PRId32")\n",
rkmessage->len, rkmessage->partition);
/* rkmessage被librdkafka自动销毁*/
}
从网上看有人使用rd_kafka_message_destroy(rkmessage),librdkafka 1.7.0版本的试了下并没有用,librdkafka 1.8.0版本的会导致coredump,猜测应该是不需要手动释放的,查了源代码也没发现具体是在哪个函数里执行的释放操作。现在的情况是,因为没有释放,导致内存逐渐增加,CPU也是慢慢的升高,等升高到5%后就保持在这个水平,但是内存还是在不断增加,所以猜测应该是内存一直没有释放掉。
操作系统是aix 7.1(linux的商用版本),安装librdkafka是没问题的,编译和kafka发送都是成功的,不清楚哪个阶段出现了问题,请问下有没有遇到这个情况的,十分感谢