librdkafka 0.8 的官网 https://github.com/edenhill/librdkafka/tree/0.8-wip
这份代码是我现在能够看到的最新的代码,在未来的版本中代码会发生改动。为了方便查看我现在所分析的源码,我已经将它上传到资源http://download.csdn.net/detail/auwzb/5844679。
在这篇文章中,我将结合源码介绍关于 librdkafka 0.8 的一些内容。详情如下:
A. producer 发送消息到内部的缓冲队列的过程
B. broker 线程从内部的缓冲队列取消息的过程
C. 消息通过系统调用sendmsg发送出去的过程
这3个过程的介绍将是连贯的。
一、 producer 发送消息到内部的缓冲队列的过程
1. librdkafka 0.8的example中发送消息的函数如下。
/* Send/Produce message. */
rd_kafka_produce(rkt, partition,
RD_KAFKA_MSG_F_COPY,
/* Payload and length */
buf, len,
/* Optional key and its length */
NULL, 0,
/* Message opaque, provided in
* delivery report callback as
* msg_opaque. */
NULL);
2. rdkafka.c:523~532
(注:这里所说的行数都是源码中对应的行数)