Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Compatibility, Deprecation, and Migration Plan

  • Migration

    Plan

    plan :

    • Currently the code version is 0.10.1,
    • We will have a two staged migration plan
    • Stage 1: message.format.version = 0.10.1-1
    • The broker should understand the attribute flag as well as Null for the value for log compaction
    • If consuming client is of older version, we down convert the message if attribute flag is set, nulling the value so that they preserve existing behaviour
    • Stage 2 (once all existing consumers and producers are updated and for new client installs):
    • set message.format.version=0.10.2 and rolling restart brokers
    • The broker only understands the attribute flag for log compaction, IBP = 0.10.1.
    • Create internal ApiVersion 0.10.2-IV0 which uses ProduceRequest V3 (magic byte = 2) and FetchRequest V3 (magic byte =2).
    • We first upgrade the code to support ApiVersion 0.10.2-IV0 with a rolling upgrade.
    • Do a rolling bounce and set the IBP = 0.10.2
    • Upgrade clients to start producing and consuming using ProduceRequest V3 (magic byte = 2) and FetchRequest V3 (magic byte =2).
      • At this point if the broker receives ProduceRequest V3 from producer with the tombstone bit set in the message, it will down convert it to set it to null. ProduceRequest V2 will work as it does today.
      • At this point if the broker receives FetchRequest V2 from consumer, we will not loose zero copy because the message is down converted. If the broker receives FetchRequest V3, it will still work as the consumer will be able to understand the tombstone bit.
    • When all the clients have upgraded, bump up the message.format.version to 0.10.2 on the broker. We should be careful here to see that almost all consumers are upgraded since at this point if broker receives a FetchRequest V2, we might loose zero copy on the broker.
    • From log compaction point of view :
      • If the magic byte on message is 0, the broker should use the null value for log compaction.
      • If the magic byte on message is 1, the broker should use the null value for log compaction.
      • If the magic byte on message is 2, the broker should use the tombstone bit for log compaction.
    • NOTE : With the new version of producer client using ProduceRequest V3 (magic byte = 2), a non tombstone (tombstone bit not set) and null value should not be allowed as the older version of consumer using FetchRequest V2 will think of this as a tombstone when its actually not.

Rejected Alternatives

Do nothing KIP-82 would remove the immediate issue.

...