Kafka Serializer JSON

时间:2015-10-04 23:38:16

标签: json serialization apache-kafka kafka-producer-api

我是Kafka,Serialization和JSON的新手

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

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

所以我研究了制作JSON序列化程序并在我的制作人配置中设置它。

我在这里使用了JsonEncoder:Kafka: writing custom serializer

但是当我现在尝试运行我的生产者时,似乎在编码器的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);

我错过了什么?我的原始方法(转换为字符串并发送然后重建JSON obj)是否可以?或者只是没有正确的方法?

谢谢!

2 个答案:

答案 0 :(得分:4)

嗯,你为什么害怕序列化/反序列化步骤会导致数据丢失?

您拥有的一个选项是使用Confluent's Schema Registry中包含的Kafka JSON序列化程序,它是免费的开源软件(免责声明:我在Confluent工作)。其test suite提供了一些示例以帮助您入门,有关详细信息,请参阅serializers and formatters。这个JSON序列化程序和模式注册表本身的好处是它们为Kafka提供了与生产者和消费者客户端的透明集成。除了JSON之外,如果您需要,还可以支持Apache Avro。

恕我直言,在JSON与Kafka交谈时,这个设置是开发人员方便性和易用性方面的最佳选择之一 - 但当然是YMMV!

答案 1 :(得分:1)

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

  

byte [] eventBody = event.getBody();

这将提高您的性能,Kafka Consumer还提供JSON解析器,它将帮助您恢复JSON。
如果需要任何进一步的信息,请告诉我。