生产
#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;
}
/* 信号捕捉 */