首页 > 代码库 > 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 源码分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。