kafka消费二进制数据流使用idea打印在控制台乱码

风中听风 发表于: 2022-02-24   最后更新时间: 2022-02-24 17:15:39   1,839 游览

kafka消费的二进制流乱码,怎么样将二进制正确的打印显示或者写入到文件中

@KafkaListener(topics = "")
public void consumerStreamData(ConsumerRecord<?,?> record){
    System.out.println("[stream] record ===================== \n" + record.value() + "\n offset =========================== " + record.offset());
}

kafka消费者

kafka控制台乱码

发表于 2022-02-24
添加评论

设置你生产者和消费者消息的数据类型,参考如下:

private Map<String, Object> consumerProps() {
    Map<String, Object> props = new HashMap<>();
    ...
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    return props;
}

private Map<String, Object> senderProps() {
    Map<String, Object> props = new HashMap<>();
    ...
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    return props;
}

如果还是乱码,则查看idea控台默认的格式。

风中听风 -> 半兽人 2年前

我想解决的是如何将读取的二进制数据写入到文件中

你得需要这样设置:

Map<String, Object> props = new HashMap<>();
    ...
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class);

最后你需要知道你得字节定义,按照字节定义进行解析即可(比如:那哪几位一组,按照定义进行解析就行),不然你这样打印的肯定是乱码的

使用ByteArray进行序列化,输出的value为[B@294c79e1

你得这么解析,我这只是例子哈。

public boolean SaveSourceCodeBytes(List<byte[]> list, HTable table) throws Exception {
        try {
            int j = 0;
            for (int i = 0; i < list.size(); i++) {
                byte[] bytearray = list.get(i);
                byte[] id = new byte[8];
                System.arraycopy(bytearray, 0, id, 0, 8);
                long terminal_id = CommonUtil.byteToLong(id);

特别感谢,我是接收数据的时候没有指定类型,所以会有错误,指定了类型就正确了,谢谢

public void newConsumerData(ConsumerRecord<String, byte[]> record) {}
你的答案

查看kafka相关的其他问题或提一个您自己的问题