代码示例
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”总是变成NULL字符串。
我确实尝试了一种解决方案,以对似乎具有该值的argRkMessage-> key的内容进行十六进制转储。
我正在使用librdkafka和avro.c来实现这一点。该示例代码是C-Kafka消费者流程的精简版,旨在获取以AVRO格式编码的复杂Kafka消息。