Кафка Производитель без ключевого сериализатора - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть производитель какфа, которому не нужно сериализовать ключ, только значения.Но для конфигурации производителя требуется параметр «key.serializer».

Map<String, Object> producerConfig = new HashMap<>();
producerConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

Меня сбивает с толку, когда настроен случайный параметр, который фактически не используется.

Есть ли способ не устанавливать настройку "key.serializer", чтобы сигнализировать, что ключ не сериализован?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Брокер Kafka хранит байтовые массивы .Поэтому я думаю, что вы должны сериализовать.

Сообщение темы от производителя должно быть превращено в байтовые массивы (потоки байтов, потоки байтов) и сохранено в разделе брокера.А затем он сериализуется, чтобы перейти к потребителю.

А сообщение - это ключ, пара значений.поэтому необходимы и ключ, и значение.

enter image description here

1 голос
/ 15 апреля 2019

Невозможно указать, что ключ будет null и key.serializer не требуется.

KafkaProducer не знает, если переданное ProducerRecord имеет ключ и / или значение, установленное на null, поэтому сериализаторы должны быть переданы.

Невозможно отправить сообщение без ключа. Даже если вы используете следующий конструктор: ProducerRecord(String topic, V value). За сценой он устанавливает ключ (null):

public ProducerRecord(String topic, V value) {
    this(topic, null, null, null /* key */, value, null);
}
...