示例代码片段
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 消息。