使用C

时间:2016-01-26 02:12:43

标签: c apache-kafka kafka-consumer-api kafka-producer-api

我正在创建一个基于kafka的消息系统,它必须在kafka中转储一个复杂的C结构。首先,我想通过创建一个简单的结构并发送它来做一些简单的事情:

struct Points {
   int   x,y;
} points;

struct Points p;

p.x=0;
p.y=0;

size_t len = sizeof(p);

在制片人中:

rd_kafka_produce(rkt, partition,RD_KAFKA_MSG_F_COPY,&p, len,NULL, 0,NULL)

在消费者中我定义了相同的结构,但后来我使用:

rkmessage = rd_kafka_consume(rkt, partition, 1000);
struct Points* p2=(struct Points*)&(rkmessage->payload);
            printf("Struct p: %d %d\n\n",p2->x,p2->y);

但它打印垃圾。

我,j是1,1

%消息(偏移0,8个字节):

Message Payload hexdump(8字节):

<00> 00000000:01 00 00 00 01 00 00 00

Struct p:-469758844 32530

我,j是256,256

%消息(偏移1,8字节):

Message Payload hexdump(8字节):

<00> 00000000:80 00 00 00 80 00 00 00

Struct p:-469758810 32530

i,j为4294967295(max int),4294967295(max int)

%消息(偏移量2,8字节):

Message Payload hexdump(8字节):

00000000:ff ff ff ff ff ff ff ff

Struct p:-469758776 32530

我,j是0,0

%消息(偏移3,8字节):

Message Payload hexdump(8字节):

<00> 00000000:00 00 00 00 00 00 00 00

结构p:-469758742 32530

如何正确转储并获取结构?我知道我可能会对数据进行序列化,但将来我将不得不发送更复杂的不透明结构。此外,通过序列化,我可以使用更多的内存。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为rd_kafka_consume(rkt, partition, 1000)已经返回指向您的指针,因此在下面的语句中您不需要&

struct Points* p2=(struct Points*)(rkmessage->payload);

希望这会有所帮助。