You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Grant Henke (JIRA)" <ji...@apache.org> on 2016/04/15 16:58:25 UTC

[jira] [Created] (KAFKA-3563) Maintain MessageAndMetadata constructor compatibility

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)