Avro C和librdkafka-消费者实现;正在为分析字段值获取NULL-始终

Avro C和librdkafka-消费者实现;正在为分析字段值获取NULL-始终,c,avro,librdkafka,C,Avro,Librdkafka,代码示例片段 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 m

代码示例片段

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”总是为空字符串

我确实尝试了一个解决方案,对argRkMessage->key的内容进行hexdump,这似乎有价值


我正在使用librdkafka和avro.c来实现它。示例代码是C-Kafka使用者进程的精简版本,用于获取以AVRO格式编码的复杂Kafka消息。

KEY
在调用
malloc
?printf(“KEY is:%s”,KEY)后为NULL;这里我将其作为NULL获取。大小为1(\0).基本上,我无法使用:avro_value_get_string()获取值。不确定这里出了什么问题。KEY被定义为const char*。我做了一个malloc只是为了确定。文档从来没有要求它。field是一个avro_值,size是一个size_t。有人可以帮助获得一个C程序示例:使用librdkafka库从kafka读取具有avro编码的KEY和消息体的消息。我们可以使用librd卡夫卡和阿夫罗c库。仍然停留在上面的代码片段中。任何帮助都将不胜感激。