我正在scala中使用0.9KafkaJava客户机。
scala> val kafkaProducer = new KafkaProducer[String, String](props)
``` `ProducerRecord` 具有多个构造函数,允许您包含或不包含键和/或分区。
scala> val keyedRecord = new ProducerRecord("topic", "key", "value")
scala> kafkaProducer.send(keyedRecord)
应该没问题。
然而,一个无知的人 `ProducerRecord` 给出类型错误。
scala> val unkeyedRecord = new ProducerRecord("topic", "value")
res8: org.apache.kafka.clients.producer.ProducerRecord[Nothing,String] =
ProducerRecord(topic=topic, partition=null, key=null, value=value
scala> kafkaProducer.send(res8)
:17: error: type mismatch;
found : org.apache.kafka.clients.producer.ProducerRecord[Nothing,String]
required: org.apache.kafka.clients.producer.ProducerRecord[String,String]
Note: Nothing <: String, but Java-defined class ProducerRecord is invariant in type K.
You may wish to investigate a wildcard type such as _ <: String
. (SLS 3.2.10)
kafkaProducer.send(res8)
^
这是违反Kafka的规则,还是因为在scala中使用javaapi而产生的不必要的预防措施?
更重要的是,把关键的和不关键的信息放在同一个Kafka主题中是不是形式很差?
谢谢您
javadoc公司:http://kafka.apache.org/090/javadoc/org/apache/kafka/clients/producer/package-summary.html
编辑
可以改变参数的方差 `K` 在 `KafkaProducer` 修好这个?
1条答案
按热度按时间mzmfm0qo1#
答案似乎在注解中,但要说清楚,scala在没有显式提供类型时使用类型推断。既然你写了:
没有提供键,它将变为null,scala的类型系统推断这是一个nothing示例。要解决此问题,请显式声明类型: