librdkafka0.8.6消费者
https://github.com/edenhill/librdkafka/releases/tag/0.8.6.
下载librdkafka0.8.6压缩包。
解压缩
./configure
make
make install
#include "rdkafka.h"
int main()
{
rd_kafka_t *s_pRck = NULL;
rd_kafka_topic_t *s_pRkt = NULL;
int iStartOffset=-1000;
int iPartition=0;
char chErrStr[512]={0};
rd_kafka_conf_t *pConf = NULL;
rd_kafka_topic_conf_t *pTopicConf = NULL;
/* Kafka configuration */
pConf = rd_kafka_conf_new();
/* Topic configuration */
pTopicConf = rd_kafka_topic_conf_new();
/* Create Kafka handle */
if (!(s_pRck = rd_kafka_new(RD_KAFKA_CONSUMER, pConf,
chErrStr, sizeof(chErrStr)))) {
fprintf(stderr,
"%% Failed to create new consumer: %s\n",
chErrStr);
exit(1);
}
/* Add brokers */
if (rd_kafka_brokers_add(s_pRck, "192.168.0.1:9092") == 0) {
fprintf(stderr, "%% No valid brokers specified\n");
exit(1);
}
/* Add brokers */
if (rd_kafka_brokers_add(s_pRck, "192.168.0.2:9092") == 0) {
fprintf(stderr, "%% No valid brokers specified\n");
exit(1);
}
/* Add brokers */
if (rd_kafka_brokers_add(s_pRck, "192.168.0.3:9092") == 0) {
fprintf(stderr, "%% No valid brokers specified\n");
exit(1);
}
rd_kafka_topic_conf_set(pTopicConf,"offset.store.path","/usr/local/kafkaoffset", chErrStr, sizeof(chErrStr));
rd_kafka_topic_conf_set(pTopicConf,"offset.store.method","file", chErrStr, sizeof(chErrStr));
/* Create topic */
s_pRkt = rd_kafka_topic_new(s_pRck, "test", pTopicConf);
if (rd_kafka_consume_start(s_pRkt, iPartition, iStartOffset) == -1){
fprintf(stderr, "%% Failed to start consuming: %s\n",
strerror(errno));
return 1;
}
rd_kafka_message_t *rkmessage;
while(1)
{
rkmessage = rd_kafka_consume(s_pRkt, iPartition, 1000);
if (rkmessage) /* timeout */
{
if (rkmessage->err)
{
if (rkmessage->err == RD_KAFKA_RESP_ERR__PARTITION_EOF)
{
continue;
}
continue;
}
printf("%s %d\n",(char *)rkmessage->payload, rkmessage->len);
/* Return message to rdkafka */
rd_kafka_message_destroy(rkmessage);
}
}
rd_kafka_consume_stop(s_pRkt, iPartition);
rd_kafka_topic_destroy(s_pRkt);
rd_kafka_destroy(s_pRck);
/* Let background threads clean up and terminate cleanly. */
rd_kafka_wait_destroyed(2000);
return 0;
}
kafka0.8.6版本消费时必须指定主题和分区。一次只能读取一个分区。