【发布时间】:2016-01-26 10:29:11
【问题描述】:
我正在创建一个基于 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
% Message (offset 0, 8 bytes):
消息负载 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(max int),4294967295(max int)
% 消息(偏移量 2,8 字节):
消息负载 hexdump(8 字节):
00000000: ff ff ff ff ff ff ff
结构 p:-469758776 32530
i,j 为 0,0
% Message (offset 3, 8 bytes):
消息负载 hexdump(8 字节):
00000000: 00 00 00 00 00 00 00 00
结构 p:-469758742 32530
如何正确转储并获取结构?我知道我可能会序列化数据,但将来我将不得不发送一个更复杂的不透明结构。此外,通过序列化它,我可能会使用更多的内存。
谢谢
【问题讨论】:
标签: c apache-kafka kafka-consumer-api kafka-producer-api