Apache kafka kafka 0.8.2.0的默认序列化程序

Apache kafka kafka 0.8.2.0的默认序列化程序,apache-kafka,Apache Kafka,我正在使用他们新的KafkaProducerAPI设置Kafka producer,出现以下错误 Exception in thread "main" org.apache.kafka.common.config.ConfigException: Missing required configuration "key.serializer" which has no default value. at org.apache.kafka.common.config.ConfigDef.parse(

我正在使用他们新的KafkaProducerAPI设置Kafka producer,出现以下错误

Exception in thread "main" org.apache.kafka.common.config.ConfigException: Missing required configuration "key.serializer" which has no default value.
at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:124)
at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:48)
at org.apache.kafka.clients.producer.ProducerConfig.<init>(ProducerConfig.java:235)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:129)
at com.kafka.producer.App.KafkaProducer(App.java:43)
at com.kafka.producer.App.main(App.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
线程“main”org.apache.kafka.common.config.ConfigException中的异常:缺少没有默认值的必需配置“key.serializer”。 位于org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:124) 位于org.apache.kafka.common.config.AbstractConfig.(AbstractConfig.java:48) 位于org.apache.kafka.clients.producer.ProducerConfig.(ProducerConfig.java:235) 位于org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:129) 位于com.kafka.producer.App.KafkaProducer(App.java:43) 位于com.kafka.producer.App.main(App.java:33) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:483) 位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 这里似乎没有默认的序列化程序和文档,我看不到可能的值


此问题适用于Kafka 0.8.2.0版本

假设您需要StringSerializer,请使用:

props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName()); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName()); put(ProducerConfig.VALUE\u SERIALIZER\u CLASS\u CONFIG,StringSerializer.CLASS.getName()); put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,StringSerializer.CLASS.getName());
这里的完整示例:

卡夫卡的早期版本带有默认序列化程序,但这造成了很多混乱

对于0.8.2,您需要自己从API附带的StringSerializer或ByteArraySerializer中选择一个序列化程序,或者构建自己的序列化程序

API序列化程序可在以下位置找到: 字符串序列化程序: ByteArraySerializer:

因此,如果您希望使用默认序列化程序,您的解决方案将是使用以下选项之一

props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");


你能分享生产者代码吗?我喜欢这个解决方案,因为它与字符串无关,而是与真实的类/值有关,所以即使有什么变化,它也能工作!也就是说,我们希望将整数作为值发送。我应该如何在这里使用序列化程序!!从0.9开始,有一个。
props.put("key.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");