Avro C и librdkafka - потребительская реализация; Получение значения NULL для парсинга значения поля - всегда - PullRequest
0 голосов
/ 07 января 2020

Пример фрагмента кода

KEY = (char *)malloc(sizeof(argRkMessage->key)+1);
    if( KEY != NULL )
    {
       //Logger
    }
    reader_class = avro_generic_class_from_schema(KEYSchema);
    check_i(avro_generic_value_new(reader_class, &val));
    /*Send the memory in the buffer into the reader*/
    nested_reader = avro_reader_memory( argRkMessage->key, sizeof(argRkMessage->key) );
    check_i(avro_value_read( nested_reader, &val ));
    type = avro_value_get_type(&val);
    if ( type == AVRO_RECORD )
    {
//logger
    }
    check_i(avro_value_get_size(&val, &field_count));
    check_i(avro_value_get_by_name(&val, "Key", &field, NULL));
    type = avro_value_get_type(&field);
    if ( type == AVRO_STRING )
    {
//logger
    }
    check_i(avro_value_get_string(&field, &KEY, &size));


printf(“Key is:%s", KEY);

Проблема, с которой я столкнулся, заключается в том, что «KEY» всегда представляет собой пустую строку.

Я пытался найти решение, чтобы сделать hexdump содержимого argRkMessage-> key, который, кажется, имеет значение.

Я использую librdkafka и avro. c, чтобы реализовать это. Пример кода представляет собой урезанную версию пользовательского процесса C -Kafka, который предназначен для получения сложных сообщений Kafka, закодированных в формате AVRO.

...