一、主要数据结构
1、typedef struct rd_kafka_conf_s rd_kafka_conf_t;
rd_kafka_conf_t是kafka的全局配置结构,通过rd_kafka_conf_new()创建,创建时即进行了默认配置,通过rd_kafka_conf_set()设置参数值,是rd_kafka_new()创建kafka处理句柄的第二个参数,是必须创建的结构。
2、typedef struct rd_kafka_topic_conf_s rd_kafka_topic_conf_t;
rd_kafka_topic_conf_t主题配置结构,通过rd_kafka_topic_conf_new()创建,创建时即进行了默认配置,通过rd_kafka_topic_conf_set()设置参数值,是必须创建的结构。
3、typedef struct rd_kafka_s rd_kafka_t;
rd_kafka_t 是kafka 处理句柄结构,分为producer类型和consumer类型,由rd_kafka_new()第一个参数类型决定。rd_kafka_t是一个总体结构,conf和topic_conf都是为此结构服务,其中包含rk_brokers链表,rk_topics链表,是必须创建的结构。
4、typedef struct rd_kafka_topic_partition_list_s rd_kafka_topic_partition_list_t;
rd_kafka_topic_partition_list_t 可扩展长度的 主题-分区 链表,通过rd_kafka_topic_partition_list_new()创建,创建时指定长度,通过rd_kafka_topic_partition_list_add()添加 主题-分区对,用于订阅消息。
二、主要接口
1、rd_kafka_conf_t *rd_kafka_conf_new (void)
参数:无
返回值:rd_kafka_conf_t *
创建一个kafka全局配置结构,并进行默认初始化设置,返回其引用指针。
2、rd_kafka_conf_res_t rd_kafka_conf_set (rd_kafka_conf_t *conf,
const char *name,
const char *value,
char *errstr, size_t errstr_size)
参数:
conf:配置结构
vame:配置项名称
value:配置项值
errstr:错误提示
errstr_size:错误提示长度
返回值:rd_kafka_conf_res_t 枚举,错误写入errstr中
name具体的名称及作用见rd_kafka_properties 中_RK_GLOBAL类型的数据定义。调用这个函数后再调用rd_kafka_conf_set_default_topic_conf()会将之前设置的值全部用默认值覆盖掉。因为错误提示会写入errstr中,所以提前给errstr分配512字节空间。
bootstrap.servers
3、rd_kafka_topic_conf_t *rd_kafka_topic_conf_new (void)
参数:无
返回值:rd_kafka_topic_conf_t *
创建一个主题配置结构,并进行默认初始化设置,返回其引用指针。
4、rd_kafka_conf_res_t rd_kafka_topic_conf_set (rd_kafka_topic_conf_t *conf,
const char *name,
const char *value,
char *errstr, size_t errstr_size)
参数:
Conf:主题配置结构
Name:主题配置项名称
Value:主题配置项值
Errstr:错误提示
errstr_size:错误提示长度
返回值:rd_kafka_conf_res_t 枚举,错误写入errstr中
name具体的名称及作用见rd_kafka_properties 中_RK_TOPIC类型的数据定义。因为错误提示会写入errstr中,所以提前给errstr分配512字节空间。
5、rd_kafka_t *rd_kafka_new (rd_kafka_type_t type, rd_kafka_conf_t *app_conf,
char *errstr, size_t errstr_size)
参数:
Type:RD_KAFKA_PRODUCER是创建生产者类型,RD_KAFKA_CONSUMER是创建消费者类型
Conf:配置结构
Errstr:错误提示
errstr_size:错误提示长度
返回值:
成功:返回rd_kafka_t *kafka操作句柄
失败:返回NULL,并记录错误信息到errstr
程序中先配置conf和topic_conf,然后调用此接口生成操作句柄。对消费者来讲,订阅主题,轮询接收消息。对生产者来讲,根据主题生成主题操作句柄,并通过主题操作句柄发送消息。
6、void rd_kafka_destroy (rd_kafka_t *rk)
参数:
Rk:kafka操作句柄
返回值:无
释放创建的kafka操作句柄。
6、rd_kafka_topic_t *rd_kafka_topic_new (rd_kafka_t *rk, const char *topic,
rd_kafka_topic_conf_t *conf)
参数:
Rk:kafka操作句柄
Topic:主题内容
Conf:主题配置
返回值:
成功:返回rd_kafka_topic_t * 主题操作句柄
失败:返回NULL,记录错误信息到errstr
此接口一般是生产者使用,使用此接口生成的主题操作句柄进行发送消息。
7、void rd_kafka_topic_destroy (rd_kafka_topic_t *app_rkt)
参数:
app_rkt:主题操作句柄
返回值:无
释放创建的主题操作句柄
8、int rd_kafka_produce (rd_kafka_topic_t *rkt, int32_t partition,
int msgflags,
void *payload, size_t len,
const void *key, size_t keylen,
void *msg_opaque)
参数:
Rkt:主题操作句柄
Partition:分区号
Msgflags:消息标志,使用RD_KAFKA_MSG_F_COPY标志
Payload:消息体指针
Len:消息体长度
Key:消息选项key值,用作平衡分区,计算分区号的,填NULL
Keylen:key长度,填0
msg_opaque:是作为回调函数的参数,填NULL
10、int rd_kafka_poll(rd_kafka_t *rk, int timeout_ms)
参数:
Rk:kafka操作句柄
timeout_ms:毫秒级时间
返回值:处理的事件数
发送完消息后调用此接口,timeout_ms是毫秒级的时间,函数会阻塞timeout_ms 毫秒等待事件处理,调用设置的回调函数。timeout_ms为0是非阻塞状态。
11、rd_kafka_resp_err_t rd_kafka_flush (rd_kafka_t *rk, int timeout_ms)
参数:
Rk:kafka操作句柄
timeout_ms:毫秒级时间
返回值:
成功:RD_KAFKA_RESP_ERR_NO_ERROR
失败:RD_KAFKA_RESP_ERR__TIMED_OUT
在摧毁生产者之前调用此接口,确保正在排队和正在进行的消息被处理完成。此函数会调用rd_kafka_poll()并触发回调。
12、int rd_kafka_brokers_add (rd_kafka_t *rk, const char *brokerlist)
参数:
Rk:kafka操作句柄
Brokerlist:broker字符串 如:”172.20.51.38:9092” 不写端口,则采用默认端口9092
多个broker brokerlist = "broker1:10000,broker2"
返回值:成功添加的broker个数
添加一个broker也可以通过 设置rd_kafka_conf_t结构中的 "bootstrap.servers" 配置项
rd_kafka_conf_set(conf, "bootstrap.servers", brokers, errstr, sizeof(errstr))
13、rd_kafka_resp_err_t rd_kafka_poll_set_consumer (rd_kafka_t *rk)
参数:
Rk:kafka操作句柄
返回值:rd_kafka_resp_err_t 枚举
将消息重定向到了消费者队列,可以使用rd_kafka_consumer_poll()进行取消息。
14、rd_kafka_topic_partition_list_t *rd_kafka_topic_partition_list_new (int size)
参数:size是topic结构的个数
返回值:无