Goal is to design a communication protocol that able to work supports messages exchange between nodes with different Ignite versions.
...
- It's an internal communication protocol between Ignite nodes:
- There is a limited amount of peers, and all peers are aware of versions of each other.
- All peers are aware of messages schemas.
- At most time peers use schemas of same version. In short period of time (during RU) schemas might differ, but not much (few messages might differ with few fields only).
- It is proposed to provide compatibility between versions that differ by 1 minor version, for example between 2.20.X and 2.19.X (but not between 2.20.X and 2.18.X).
- Messages can be pretty big, contains cache entries (putAll, historic rebalance).
- Code changes should be minimal.
...
- Order of fields is guaranteed → it send sends messages as byte stream serializing fields one by one, no delimiters are used between fields and messages.
- There is API for sending field names for schema resolving.
...
- Writes field names like json. Suppose that received doesn't have a schema.
Kafka
https://kafka.apache.org/protocol.html
- All messages are size delimited
- Fields order is preserved, no field numbers or tags are used.
- Clients and brokers are aware of versions of each other and send messages in the form for specific versions known by each others