Scala で 0.9 Kafka Java クライアントを使用しています。
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)
<console>: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 でこの Java API を使用することによる不必要な予防措置でしょうか?
より基本的には、キー付きメッセージとキーなしメッセージを同じ Kafka トピックに入れるのは不適切な形式ですか?
ありがとうございました
Javadoc: http://kafka.apache.org/090/javadoc/org/apache/kafka/clients/producer/package-summary.html
編集
パラメータの分散を変更すると、これK
をKafkaProducer
修正できますか?