2017-09-15 1 views
0

Ich habe einen RD Kafka Client mit LIBRDKAFKA C Library entwickelt. Die Bibliothek LIBRDKAFKA C hat die APIs set_config zum Festlegen von Konfigurationswerten für Consumer- und Producer-Handles verfügbar gemacht. Es gibt ungefähr Hunderte von Konfigurationen, die gesetzt werden können, es wurde sehr mühsam set_congig für jeden Wert zu setzen. Wichtig ist die nicht effiziente Art und Weise, Configs im Code selbst zu setzen, da wir hier keine Flexibilität haben, um Konfigurationswerte auf verschiedene Plattformen abzustimmen, da sie RD Kafka Clients neu aufbauen müssen.Wie liest man Konfigurationswerte aus einer Datei in RD Kafka Client?

+0

Diese Frage zu RD Kafka-Client verknüpft, für die zur Zeit I didn‘ t keinen Tag sehen. Kann jeder Freiwillige ein solches Tag erstellen? – dcds

Antwort

0

Die Konfigurationsschnittstelle librdkafka ist in diesem Sinne konzipiert und bietet einen einfachen String-Schlüssel, Wert-API für 95% der Konfigurationseigenschaften (die restlichen sind C-Callbacks usw., die richtige Typen benötigen).

Hier ist ein Beispiel dafür, wie ein Konfigurationsdatei-Lesegerät (mit key=value\n Syntax) zu implementieren, die alle Standards librdkafka Konfiguration eingestellt werden kann: ist

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

In configurationfile, kann ich Eigenschaften wie folgt setzen: socket.nagle.disable = false (zum Beispiel) – dcds

+0

Ja, es erwartet das 'key = value' Format, so dass es funktioniert. – Edenhill

+0

@dcds Bitte schließen Sie Ihre Frage, indem Sie auf das Häkchen links neben der Antwort klicken, wenn Sie mit der Antwort zufrieden sind. – Edenhill

Verwandte Themen