C语言 librdkafka 简单分析生产、消费的实例

生产

#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <librdkafka/rdkafka.h>

static volatile sig_atomic_t run = 1;

/**
 * @brief Signal termination of program
 */
static void stop (int sig) {
   
    run = 0;
    fclose(stdin); /* abort fgets() */
}

static void dr_msg_cb (rd_kafka_t *rk,
                       const rd_kafka_message_t *rkmessage, void *opaque) {
   
    if (rkmessage->err)
        fprintf(stderr, "%% Message delivery failed: %s\n",
                rd_kafka_err2str(rkmessage->err));
    else
        fprintf(stderr,
                "%% Message delivered (%zd bytes, "
                "partition %"PRId32")\n",
                rkmessage->len, rkmessage->partition);
    /* The rkmessage is destroyed automatically by librdkafka */
}



int main (int argc, char **argv) {
   
    rd_kafka_t *rk;         /* kafka客户端对象 */
    rd_kafka_conf_t *conf;  /* 临时配置对象 */
    char errstr[512];       /* API错误报告缓冲区 */
    char buf[512];          /* 消息值临时缓冲区 */
    const char *brokers;    /* broker代理列表 */
    const char *topic;      /* 主题 */
    
    //brokers = argv[1];
    //topic   = argv[2];
    brokers = "192.168.205.128";
    topic   = "test_topic";
    //初始化过程
    conf = rd_kafka_conf_new();//创建rd_kafka_conf_t对象
    //设置一个配置属性,conf必须是以前用rd_kafka_conf_new()创建的。
    //这里就是对broker去进行配置
    if (rd_kafka_conf_set(conf, "bootstrap.servers", brokers,
                          errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK) {
   
       fprintf(stderr, "%s\n", errstr);
       return 1;
    }
    //设置回调函数dr_msg_cb,rd_kafka_produce()接收的每条消息都会调用一次该回调函数
    rd_kafka_conf_set_dr_msg_cb(conf, dr_msg_cb);
    //创建一个新的Kafka句柄,即创建producer实例
    rk = rd_kafka_new(RD_KAFKA_PRODUCER, conf, errstr, sizeof(errstr));
    if (!rk) {
   
            fprintf(stderr,
                    "%% Failed to create new producer: %s\n", errstr);
            return 1;
    }
    
    /* 信号捕捉 */
    
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值