Каждая тема Кафки должна содержать сообщения, которые логически похожи, просто чтобы оставаться в теме. Теперь иногда может случиться, что у вас есть тема, скажем, fruits , которая содержит различные атрибуты фрукта (возможно, в формате json). У вас могут быть разные сообщения о фруктах, выдвинутые производителями, но вы хотите, чтобы одна из вашей группы потребителей обрабатывала только яблоки. В идеале вы могли бы использовать названия тем с отдельными названиями фруктов, но давайте предположим, что по какой-то причине это будет бесплодным начинанием (может быть, слишком много тем). В этом случае вы можете переопределить схему разбиения по умолчанию в Kafka, чтобы игнорировать ключ и выполнить произвольное разбиение, а затем передать свой класс пользовательских разделителей через свойство partitioner.class в источнике, который помещает название плода в ключе msg. Это необходимо, потому что по умолчанию, если вы ставите ключ во время отправки сообщения, он всегда будет перемещаться в один и тот же раздел, что может привести к дисбалансу раздела.
Идея, лежащая в основе этого, иногда заключается в том, что, если ваше значение Kafka msg является сложным объектом (json, avro-record и т. Д.), Может быть быстрее отфильтровать запись по ключу, чем анализировать все значение и извлекать требуемое поле. У меня сейчас нет никаких данных, чтобы поддержать выигрыш в производительности этого подхода. Это только интуиция.