4

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


編集

パラメータの分散を変更すると、これKKafkaProducer修正できますか?

4

1 に答える 1