【问题标题】:Apache kafka sending java object failedApache kafka 发送 java 对象失败
【发布时间】:2018-01-16 20:16:07
【问题描述】:

我有这个对象

       HashMap message = new HashMap();
       message.put("x", "xxxxx");
       message.put("y", "yyyyy");
       message.put("z", 100);

       ProducerRecord producerRecord = new ProducerRecord(topic, message);
       producer.send(producerRecord); 

我来了

线程“主”org.apache.kafka.common.errors.SerializationException 中的异常:无法将类 java.util.HashMap 的值转换为值中指定的类 org.apache.kafka.common.serialization.StringSerializer。序列化器

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    您必须为 Kafka 提供一种将消息(在本例中为 HashMap)转换为二进制形式的方法。来自Kafka documentation

    key.serializer 和 value.serializer 指示如何将用户通过其 ProducerRecord 提供的键和值对象转换为字节。您可以将包含的 ByteArraySerializer 或 StringSerializer 用于简单的字符串或字节类型。

    使用示例:

     Properties props = new Properties();
     props.put("key.serializer", "YourImplementation");
     props.put("value.serializer", "YourImplementation");
    
     Producer<String, HashMap> producer = new KafkaProducer<>(props);
    

    【讨论】:

    • 一个简单的例子就好了
    • 我得到错误 org.apache.kafka.common.errors.SerializationException: Can't convert value of class java.util.HashMap to class org.apache.kafka.common.serialization.ByteArraySerializer specified在 value.serializer 中
    【解决方案2】:

    可以将Hashmap转成json,使用JsonSerializer作为

    private void configureProducer() {
        Properties props = new Properties();
        props.put("key.serializer", StringSerializer.class.getName());
        props.put("value.serializer", JsonSerializer.class.getName());
        producer = new KafkaProducer<String, String>(props);
    }
    

    或者您也可以使用 ByteArraySerializer。参考this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多