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

本文深入解析librdkafka 0.8的源码,涵盖producer发送消息到内部缓冲队列、broker线程取消息及消息发送过程。分析了当Kafka集群中leader服务器不可用时,librdkafka无法发送消息的bug,指出问题在于librdkafka未在socket关闭后重新获取metadata。

4万+

被折叠的 条评论
为什么被折叠?



