我使用LIBRDKAFKA C Library开发了一个RD Kafka客户端。 LIBRDKAFKA C库已公开set_config API以设置Consumer和Producer Handles的配置值。有大约数百个配置可供设置,每个值的set_congig变得非常繁琐。重要的是它在代码本身设置配置的效率不高,因为我们没有灵活性来根据不同的平台调整配置值,因为它需要重新构建RD Kafka客户端。
答案 0 :(得分:0)
librdkafka配置界面的设计考虑到了这一点,为95%的配置属性提供了一个简单的字符串键,值API(其余的是C回调等,需要适当的类型)。
这里有一个关于如何实现配置文件阅读器(带有key=value\n
语法)的示例,它允许设置任何标准的librdkafka配置:
rd_kafka_conf_t *conf = rd_kafka_conf_new();
FILE *fp;
char buf[512];
int line = 0;
fp = fopen(conf_path, "r");
if (!fp) ;// add error checking..
while (fgets(buf, sizeof(buf)-1, fp)) {
char *t;
char *b = buf;
rd_kafka_conf_res_t res;
char *name, *val;
char errstr[512];
line++;
if ((t = strchr(b, '\n')))
*t = '\0';
if (*b == '#' || !*b)
continue;
if (!(t = strchr(b, '=')))
fprintf(stderr, "%s:%i: expected name=value format\n",
conf_path, line);
name = b;
*t = '\0';
val = t+1;
res = rd_kafka_conf_set(conf, name, val, errstr, sizeof(errstr));
if (res != RD_KAFKA_CONF_OK)
fprintf(stderr, "%s:%i: %s\n", conf_path, line, errstr);
}
fclose(fp);
...
// Create client
rd_kafka_t *rk;
rk = rd_kafka_new(... , conf, ..);