kafka 使用c/c++ api记录总结

conf

RdKafka::Conf

create

RdKafka::Conf *conf = RdKafka::create(RdKafka::Conf::CONF_GLOBAL);

set

Conf::ConfResult set(const std::string &name, const std::string &value, std::string &errstr);

设置配置对象的属性值,成功返回CONF_OK,错误时错误信息输出到errstr。

RdKafka::KafkaConsumer(高级consumer)

KafkaConsumer是高级用法,因为本人要使用广播,所以没列举consumer用法.

static KafkaConsumer * create(Conf *conf, std::string &errstr);

创建KafkaConsumer对象,conf对象必须配置Consumer要加入的消费者组。使用KafkaConsumer::close()进行关闭。这么做的主要原因是有可能是广播模型,而一个topic的一个分区只能由一个consumer group来消费,所以高级的KafkaConsumer的conf对象必然需要conf->set("group.id",xxxx,errstr)

ErrorCode subscribe(const std::vector< std::string > &topics);

更新订阅Topic分区,默认用这个最好.

Message * consume(int timeout_ms);

消费消息触发回调函数,调用注册的回调函数,例如RebalanceCb、EventCb、OffsetCommitCb等

RdKafka::Headers(消息的header结构)

static Headers *create();

returns an empty Headers list

static Headers *create(const std::vector<Header> &headers);

returns a Headers list from std::vector set to the size of the std::vector

virtual ErrorCode add(const std::string &key, const void *value, size_t value_size) = 0;

增加一个key value pair, key是stirng类型,pair是用户指定的类型.

virtual ErrorCode add(const std::string &key, const std::string &value) = 0;

增加一个key value pair, key是stirng类型,pair也是string类型

RdKafka::Producer

static Producer * create(Conf *conf, std::string &errstr);

创建一个新的Producer对象,conf是前面对话创建的conf

ErrorCode produce(Topic *topic, int32_t partition, int msgflags, void *payload, size_t len, const std::string *key, size_t key_len, int64_t timestamp, RdKafka::Headers *headers, void *msg_opaque);

topic/partition就是kafka的定义
msgflags:RK_MSG_BLOCK/RK_MSG_FREE/RK_MSG_COPY
RK_MSG_FREE表示RdKafka调用produce完成后会释放payload数据;
RK_MSG_COPY表示payload数据会被拷贝,在produce调用完成后RdKafka不会使用payload指针;
RK_MSG_BLOCK表示在消息队列满时阻塞produce函数,如果dr_cb回调函数被使用,应用程序必须调用rd_kafka_poll函数确保投递消息队列的投递消息投递完。
当消息队列满时,失败会导致produce函数的永久阻塞。
RK_MSG_FREE和RK_MSG_COPY是互斥操作。
payload:msg具体数据
len:msg的长度
key:optional, if not NULL,pass to topic partitioner,并被随消息发送到Broker和传递给Consumer.
key_len: key的长度
timestamp: 时间戳比如cycle beat
headers: msg的头文件信息.
msg_opaque: 暂时没有使用.


芯片老鸟
1 声望0 粉丝

引用和评论

0 条评论