Grant Henke created KAFKA-3563:
----------------------------------

             Summary: Maintain MessageAndMetadata constructor compatibility 
                 Key: KAFKA-3563
                 URL: https://issues.apache.org/jira/browse/KAFKA-3563
             Project: Kafka
          Issue Type: Improvement
    Affects Versions: 0.10.0.0
            Reporter: Grant Henke
            Assignee: Grant Henke
             Fix For: 0.10.0.0


The MessageAndMetadata constructor was changed to include timestamp information 
as a part of KIP-32. Though the constructor may not be used in general client 
usage, it may be used in unit tests or some advanced usage. We should maintain 
compatibility if possible. 

One example where the constructor is used is Apache Spark: 
https://github.com/apache/spark/blob/master/external/kafka/src/main/scala/org/apache/spark/streaming/kafka/KafkaRDD.scala#L223-L225

The old constructor was:
{code}
MessageAndMetadata[K, V](topic: String,
   partition: Int,
   private val rawMessage: Message,
   offset: Long,
   keyDecoder: Decoder[K], valueDecoder: Decoder[V])
{code}

And after KIP-32 it is now:
{code}
MessageAndMetadata[K, V](topic: String,
   partition: Int,
   private val rawMessage: Message,
   offset: Long,
   timestamp: Long = Message.NoTimestamp,
   timestampType: TimestampType = TimestampType.CREATE_TIME,
   keyDecoder: Decoder[K], valueDecoder: Decoder[V])
{code}

Even though _timestamp_ and _timestampType_ have defaults, if _keyDecoder_ and 
_valueDecoder_ were not accessed by name, then the new constructor is not 
backwards compatible. 

We can fix compatibility by moving the _timestamp_ and _timestampType_ 
parameters to the end of the constructor, or by providing a new constructor 
without _timestamp_ and _timestampType_ that matches the old constructor. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to