Кафка, отправляющая сообщение, используя ключ, чтобы определить раздел против вручную - PullRequest
2 голосов
/ 12 марта 2019

Скажем, например, у меня есть этот POJO сотрудника:

public class Employee {
  private int id;
  private String name;
}

И я хочу отправить это в тему Kafka с несколькими разделами.Поэтому я могу использовать поле id в качестве ключа для выбора правильного раздела.Я могу создать ProducerRecord, как показано ниже:

ProducerRecord<Integer, Employee> record = new ProducerRecord<>("topic", employee.getId(), employee);

Это отправит сообщение Kafka с ключом в качестве поля заголовка и employee в качестве полезной нагрузки.

У меня вопрос, если ключ уже включен в полезную нагрузку и является большой частью самой полезной нагрузки, было бы лучше рассчитать номер раздела вручную и отправить его таким образом?

Значит, это будет выглядеть примерно так:

int partition = defualtPartitioner.partition(...);
ProducerRecord<Integer, Employee> record = new ProducerRecord<>("topic", partition, null, employee);

И таким образом вы пропустите ключ из сообщения?

1 Ответ

3 голосов
/ 12 марта 2019

Вы можете сделать это, но есть ограничения:

  • Вы не можете сжать тему
  • Для некоторых операций с потоками требуются ключи (например, объединения)
  • Потребителям необходимо десериализовать все сообщение, чтобы получить ключ, поэтому вы не можете использовать ключ для эффективной маршрутизации или пропуска.

Пока вы знаете компромиссы и думаете, что размер сообщения действительно имеет значение ... пошли дальше и опускаем ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...