Пример фрагмента кода
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.