Browse Source

Restrict inner offset assignment to versions 0.10+

Eben Freeman 7 years ago
parent
commit
f0d0b0f8b6
1 changed files with 10 additions and 4 deletions
  1. 10 4
      produce_set.go

+ 10 - 4
produce_set.go

@@ -132,10 +132,16 @@ func (ps *produceSet) buildRequest() *ProduceRequest {
 				// and sent as the payload of a single fake "message" with the appropriate codec
 				// set and no key. When the server sees a message with a compression codec, it
 				// decompresses the payload and treats the result as its message set.
-				for i, msg := range set.recordsToSend.msgSet.Messages {
-					// Assign relative offsets to the inner messages. This lets
-					// the broker avoid recompressing the message set.
-					msg.Offset = int64(i)
+
+				if ps.parent.conf.Version.IsAtLeast(V0_10_0_0) {
+					// If our version is 0.10 or later, assign relative offsets
+					// to the inner messages. This lets the broker avoid
+					// recompressing the message set.
+					// (See https://cwiki.apache.org/confluence/display/KAFKA/KIP-31+-+Move+to+relative+offsets+in+compressed+message+sets
+					// for details on relative offsets.)
+					for i, msg := range set.recordsToSend.msgSet.Messages {
+						msg.Offset = int64(i)
+					}
 				}
 				payload, err := encode(set.recordsToSend.msgSet, ps.parent.conf.MetricRegistry)
 				if err != nil {