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)