最近项目需要在c++端写入数据源到kafka中,使用flink程序分析数据源,首先想到的方法就是利用protobuf做序列化和反序列化。
遇到一些问题,记录一下。
首先准备好pb文件,C++端序列化成二进制文件,代码如下
int size = test.ByteSize();
char buffer[1024];
test.SerializeToArray(buffer, size);
test为C++生成的pb的类。
RdKafka::ErrorCode err = _producer->produce(
/* Topic name */
topic,
/* Any Partition: the builtin partitioner will be
* used to assign the message to a topic based
* on the message key, or random partition if
* the key is not set. */
RdKafka::Topic::PARTITION_UA,
/* Make a copy of the value */
RdKafka::Producer::RK_MSG_COPY /* Copy payload */,
/* Value */
buffer, len,
/* Key */
NULL, 0,
/* Timestamp (defaults to current time) */
0,
/* Message headers, if any */
NULL);
然后通过rdkafka的api把二进制写入kafka中(代码省略了初始化和各种变量的说明部分),
java端的数据消费代码如下:
while (true) {
ConsumerRecords<String, String> records = consumer.poll(8000);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s,value size = %d %n", record.offset(), record.key(), record.value(),record.value().length());
try{
byte[] debytes = record.value().getBytes();
for(int i = 0;i < debytes.length;i++){