0

示例代码片段

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 消息。

4

0 回答 0