Hi,

I'm automating a low level C# kafka protocol definition by parsing the Kafka protocol guide (inkl the Record Batch documentation), and I've found some inconsistencies in the protocol guide:

1. Common Request and Response Structure

RequestOrResponse => Size (RequestMessage | ResponseMessage)
  Size => int32

FIELD   DESCRIPTION
message_size The message_size field gives the size of the subsequent request or response message in bytes. The client can read requests by first reading this 4 byte size as an integer N, and then reading and parsing the subsequent N bytes of the request.

* int32 does not follow the primitive type name INT32

* RequestMessage and ResponseMessage is never defined

* message_size is not an expression. Correct name should be Size

2. Inconsistent usage of ARRAY expressions.

Sometimes an array is expressed as a field surrounded with brackets, i.e. [topics] and sometimes it is expresses as ARRAY(INT32). Brackets in BNF usually indicates that the term is optional, which makes the usage of brackets in the context of an array confusing. Parenthesis is a grouping expression, so that is also confusing. Why not skip the use of an ARRAY primitive type and instead use a repetition expression in BNF, like the following example?

|Metadata Request (Version: 1) => topics topics => INT32 topic* topic => STRING |

3. Record batch documentation

Would it not be nice to use the BNF  format here as well? It is being used under the "5.3.3 Old Message Format" but not for "5.3.1 Record Batch" and "5.3.2 Record".

Best regards

//Fredrik

Reply via email to