2017-09-15 30 views
0

我使用LIBRDKAFKA C庫開發了一個RD Kafka客戶端。 LIBRDKAFKA C庫公開了set_config API來爲Consumer和Producer Handles設置配置值。有大約數百個可用的配置可供設置,對於每個值,set_congig變得非常繁瑣。重要的是,它在代碼本身中設置配置的效率不高,因爲我們沒有靈活性來根據不同的平臺調整配置值,因爲它需要RD Kafka客戶端的重新構建。如何從RD Kafka客戶端中的文件讀取配置值?

+0

這個問題是關係到RD卡夫卡客戶端目前我沒有」沒有看到任何標籤。任何志願者都可以創建一個這樣的標籤。 – dcds

回答

0

librdkafka配置界面是爲此設計的,爲95%的配置屬性(其餘爲C回調等)提供了一個簡單的字符串鍵值API,它需要適當的類型。

下面是關於如何實現一個配置文件讀取器(帶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, ..); 
+0

在配置文件中,我可以把屬性如下:socket.nagle.disable = false(例如) – dcds

+0

是的,它需要'key = value'格式,這樣才能工作。 – Edenhill

+0

@dcds如果您對答案滿意,請點擊答案左邊的複選標記以關閉您的問題。 – Edenhill

相關問題