首页 > 代码库 > librdkafka 源码分析

librdkafka 源码分析

1.  likely 和 unlikely用于分支预测的优化

如果一个分支命中的概率比较小,使用unlikely
如果相反,则用likely
可参考: http://www.cnblogs.com/lhfcws/p/3205366.html
 
2. pthread_once 多线程环境中保证函数只执行一遍 
3. strchr 在字符串中寻找char第一次出现的位置 
4. strrchr  在字符串中寻找char最后一次出现的位置 
5. 每个partition和每个broker保持两个tcp连接
6. 问题
技术分享
如果没有设置socket_db, 是否会有默认的回调函数? 
 
7. c++ 可使用offsetof确定struct中某一个成员变量的偏移量 
8. librdkafka 日志系统调用关系
rd_kafka_log0->log_cb回调函数(默认log_cb_trampoline)
在log_cb_trampoline函数中,如果定义了event_cb,则产生event
如果未定义event_cb, 调用rd_kafka_log_print将log打到标准错误输出
 
9. socket_cb的设置逻辑真他娘的绕,不知有何意义
Producer::create -> set_common_config -> 
-> rd_kafka_conf_set_socket_cb(将socket回调函数设置成为RdKafka::socket_cb_trampoline)
-> RdKafka::socket_cb_trampoline (到此为止, socket_cb_trampoline 只是一个没有意义的地址)
-> socket_cb_ = confimpl->socket_cb_; (执行该句之后,socket回调函数最终是confimpl->socket_cb_)
而 confimpl->socket_cb_在初始化global config的时候就已经初始化了,为什么不直接赋值呢???
 
10. c++ 宏定义中## 起到连接符的作用 
11. c++结构体内宏定义  TODO 研究
12. 二级线程启动之后,不断试图connect 10.139.41.42, 但是每次都失败 
问题
技术分享
 
13. librdkafka设置日志等级 
如果定义了debug, 则日志等级自动为LOG_DEBUG技术分享
技术分享
 
 
14. librdkafka设置日志内容
技术分享
技术分享
 
 
技术分享
只输出generic和metadata两种日志

 

librdkafka 源码分析