spring - 使用 KafkaTemplate 发送返回使用 String 作为键的异常
问题描述
当使用 Integer 作为键时,这不是问题,kafka 应该能够将字符串作为键来处理。
ProducerFactory<String, String> pf =
new DefaultKafkaProducerFactory<String, String>(senderProps);
KafkaTemplate<String, String> template = new KafkaTemplate<>(pf);
ProducerRecord<String,String> pr = new ProducerRecord<>("my-topic", "key1","test");
template.send(pr);`
它抛出以下异常:
Org.apache.kafka.common.errors.SerializationException:无法将类 java.lang.String 的键转换为 key.serializer 中指定的类 org.apache.kafka.common.serialization.IntegerSerializer
原因:java.lang.ClassCastException:java.lang.String 无法在 org.apache.kafka.common.serialization.IntegerSerializer.serialize(IntegerSerializer.java:21) 的 org.apache.kafka 中转换为 java.lang.Integer .common.serialization.ExtendedSerializer$Wrapper.serialize(ExtendedSerializer.java:65) at org.apache.kafka.common.serialization.ExtendedSerializer$Wrapper.serialize(ExtendedSerializer.java:55) at org.apache.kafka.clients.producer .KafkaProducer.doSend(KafkaProducer.java:799) at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:784) at org.springframework.kafka.core.DefaultKafkaProducerFactory$CloseSafeProducer.send(DefaultKafkaProducerFactory.java :285) 在 org.springframework.kafka 的 org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:357)。core.KafkaTemplate.send(KafkaTemplate.java:206)
解决方案
似乎,您的密钥序列化程序在 ProducerConfig 中设置为整数。您需要将其设置KEY_SERIALIZER_CLASS_CONFIG
为 String :
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return props;
}
推荐阅读
- wordpress - Isotope 在 wordpress 上的布局损坏,但可以在另一个测试页面上使用
- c# - 从过时的 FragmentManager 过渡到 Android.Support.V4.App
- python - 如何下载 Python 的 PolyFrag 模块?
- android - 实施指向我的应用的深层链接后,应用图标未出现
- amazon-web-services - 如何使用 .env 文件为 Springboot 应用程序使用环境变量?
- java - 我想让后台服务每 24 小时将项目添加到 RecyclerView
- sql - 如何将存储过程结果传递给变量
- python - 如何根据字典中的键值逐行向熊猫数据框添加值?
- php - 预计在运行测试时会发现类错误
- git - Git删除除一个文件外的所有文件