In KafkaProperties
provided by spring-kafka
, the de/serializer of producer and consumer is String{Des/S}serializer
.
However, when using spring-cloud-stream-binder-kafka
, it is changed to ByteArray{Des/S}erializer
by KafkaBinderEnvironmentPostProcessor
. Is there a reason to take this as default? Or is there a reason to have different settings?
The byte array (de)serializers are more efficient when converting to/from JSON (which is normally the case with Spring Cloud Stream); it avoids an unnecessary conversion from byte[]
to String
(and vice-versa) before/after JSON conversion. Jackson can convert directly to/from byte[]
which is the native Kafka value type.
Boot chose String because it provides a much simpler "getting started" experience.
Typical applications (other than SCSt) will use more sophisticated implementations (JSON, Avro, etc.).