卡夫卡序列化程序JSON

卡夫卡序列化程序JSON,json,serialization,apache-kafka,kafka-producer-api,Json,Serialization,Apache Kafka,Kafka Producer Api,我不熟悉卡夫卡、序列化和JSON 我想要的是生产者通过kafka发送一个JSON文件,消费者以原始文件形式使用JSON文件 我能够得到它,因此JSON被转换成字符串并通过字符串序列化程序发送,然后消费者将解析字符串并重新创建JSON对象,但我担心这不是有效的或正确的方法(可能会丢失JSON的字段类型) 因此,我研究了如何制作JSON序列化程序,并在我的生产者配置中进行设置 我在这里使用了JsonEncoder: 但是当我现在尝试运行我的producer时,似乎在编码器的toBytes函数中,tr

我不熟悉卡夫卡、序列化和JSON

我想要的是生产者通过kafka发送一个JSON文件,消费者以原始文件形式使用JSON文件

我能够得到它,因此JSON被转换成字符串并通过字符串序列化程序发送,然后消费者将解析字符串并重新创建JSON对象,但我担心这不是有效的或正确的方法(可能会丢失JSON的字段类型)

因此,我研究了如何制作JSON序列化程序,并在我的生产者配置中进行设置

我在这里使用了JsonEncoder:

但是当我现在尝试运行我的producer时,似乎在编码器的toBytes函数中,try块从未返回任何我想要的结果

try {
            bytes = objectMapper.writeValueAsString(object).getBytes();

        } catch (JsonProcessingException e) {
            logger.error(String.format("Json processing failed for object: %s", object.getClass().getName()), e);
        }
似乎
objectMapper.writeValueAsString(object.getBytes()
;获取我的JSON obj(
{“name”:“Kate”,“age”:25}
)并将其转换为零

这是我的制作人的跑步功能

List<KeyedMessage<String,JSONObject>> msgList=new ArrayList<KeyedMessage<String,JSONObject>>();   

    JSONObject record = new JSONObject();

    record.put("name", "Kate");
    record.put("age", 25);

    msgList.add(new KeyedMessage<String, JSONObject>(topic, record));

    producer.send(msgList);
List msgList=new ArrayList();
JSONObject记录=新的JSONObject();
记录。放入(“姓名”、“凯特”);
记录。投入(“年龄”,25岁);
添加(新的KeyedMessage(主题,记录));
制作人发送(msgList);
我错过了什么?我的原始方法(转换为字符串并发送,然后重建JSON obj)可以吗?还是不是正确的方式


谢谢

我建议将JSON事件字符串转换为字节数组,如:

字节[]eventBody=event.getBody()

这将提高您的性能,Kafka Consumer还提供JSON解析器,帮助您找回JSON。

如果需要更多信息,请告诉我。

嗯,为什么担心序列化/反序列化步骤会导致数据丢失

您可以选择使用中包含的Kafka JSON序列化程序,这是一款免费的开源软件(免责声明:我在Confluent工作)。Its提供了一些示例来帮助您入门,更多详细信息将在中介绍。这个JSON序列化程序和模式注册表本身的好处是,它们为Kafka提供了与生产者和消费者客户端的透明集成。除了JSON,如果您需要,还可以支持ApacheAvro


在使用JSON与Kafka交谈时,从开发人员的便利性和易用性来看,这个设置是最好的选择之一——当然是YMMV

你找到解决办法了吗?在你删除的答案中,你说你意识到我有难以忍受的杰克逊罐子,所以问题为你解决了?