如何从 RD Kafka Client 中的文件读取配置值?

how to read configuration values from a file in RD Kafka Client?

我使用 LIBRDKAFKA C 库开发了一个 RD Kafka 客户端。 LIBRDKAFKA C 库公开了 set_config API 来设置消费者和生产者句柄的配置值。大约有数百个配置可供设置,每个值 set_congig 变得非常乏味。重要的是,它在代码本身中设置配置的效率不高,因为这里我们没有根据不同平台灵活调整配置值的方法,因为它需要重新构建 RD Kafka 客户端。

librdkafka 配置接口的设计考虑了这一点,为 95% 的配置属性(其余为 C 回调等,需要适当的类型)提供一个简单的字符串键值 API。

下面是一个关于如何实现允许设置任何标准 librdkafka 配置的配置文件 reader(使用 key=value\n 语法)的示例:

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 = '[=10=]';

    if (*b == '#' || !*b)
        continue;

    if (!(t = strchr(b, '=')))
        fprintf(stderr, "%s:%i: expected name=value format\n",
              conf_path, line);

    name = b;
    *t = '[=10=]';
    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, ..);