At the moment, org.apache.kafka.connect.data.Struct#equals checks two things, after ensuring the incoming Object o is indeed of the correct type:
- Whether the schemas of this and o are equal, via Objects#equals
- Whether the values of this and o are qual, via Arrays#equals.
The latter check is problematic. Arrays#equals is meant for one-dimensional arrays of any kind, and thus simply checks the equals methods of all corresponding elements of its parameters a1 and a2. However, elements of the Struct#values array may themselves be arrays in a specific case, namely if a field has a BYTES Schema Type and the user's input for this field is of type byte.
Given that, I would suggest to use Arrays#deepEquals to compare the values arrays of two Struct instances. With similar reasoning, I would also suggest to use Arrays#deepHashCode in the Struct's hashCode method.
This would allow to properly compare and hash structs that get byte arrays passed in as field values instead of the recommended ByteBuffers. An alternative might be to automatically wrap byte arrays passed into any put method in a ByteBuffer.