Hi All,

As you may have noticed, the message format patch for KIP-98 was merged
last Friday. This patch also included the message format changes for
KIP-101 and KIP-82. I wanted to mention the notable differences from our
initial proposal:

1. We decided not to implement an unsigned varint type. Representing
unsigned types in Java is awkward and the benefit seemed marginal. We don't
really have any other instances of unsigned types in the protocol, so we
thought it would be simpler and more consistent to only use signed types.

2. KIP-101 adds the partition leader epoch as a new field to the message
batch header. The broker always overrides the value set by the client
before appending to the log. We were concerned about the cost to recompute
the CRC when this field changed, so we relocated the field and excluded it
from the CRC computation. This makes it similar to the offset, which is
also set by the broker and is not covered by the CRC.

3. This is not yet merged, but thanks to some work from Ismael, we intend
to change the checksum algorithm to CRC32C, which will have a native
interface in Java 9. Ismael has done the performance benchmarking and the
results look extremely promising.

See the KIP for the full format:
https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging
.

We also wanted to share some performance results that Apurva has put
together:
https://docs.google.com/spreadsheets/d/1dHY6M7qCiX-NFvsgvaE0YoVdNq26uA8608XIh_DUpI4/edit#gid=61107630.
Overall, it's looking good, but it's worth mentioning that this depends on
disabling the record-level CRC, which we currently compute only to retain
backwards compatibility with the client API:
https://issues.apache.org/jira/browse/KAFKA-4935.

Let us know if you have any feedback.

Thanks,
Jason

Reply via email to