我正在创建一个基于 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);
但它打印垃圾。
i,j 是 1,1
% 消息(偏移量 0,8 个字节):
消息有效负载 hexdump(8 个字节):
00000000: 01 00 00 00 01 00 00 00
结构 p:-469758844 32530
i,j 为 256,256
% 消息(偏移量 1,8 个字节):
消息有效负载 hexdump(8 个字节):
00000000: 80 00 00 00 80 00 00 00
结构 p:-469758810 32530
i,j 是 4294967295(最大整数),4294967295(最大整数)
% 消息(偏移量 2,8 字节):
消息有效负载 hexdump(8 个字节):
00000000: ff ff ff ff ff ff ff ff
结构 p:-469758776 32530
i,j 为 0,0
% 消息(偏移量 3,8 字节):
消息有效负载 hexdump(8 个字节):
00000000: 00 00 00 00 00 00 00 00
结构 p:-469758742 32530
如何正确转储并获取结构?我知道我可能会序列化数据,但将来我将不得不发送一个更复杂的不透明结构。此外,通过序列化它,我可能会使用更多的内存。
谢谢