24

Все examplesKafka | producers показывают пару ключей/значений ProducerRecord как не только одного типа (все примеры показывают <String,String>), но то же значение . Например:Какова цель обмена сообщениями с ключом/стоимостью Kafka?

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i))); 

Но в документации Кафки, я не могу найти, где понятие ключ/значение (и его основная цель/полезность) объясняется. В традиционных обменах сообщений (ActiveMQ, RabbitMQ и т. Д.) Я всегда запускал сообщение в определенной теме/очереди/обмене. Но Kafka - первый брокер, который, кажется, требует пары ключ/значение, а не просто строковое сообщение regulare.

Итак, я спрашиваю: Какова цель/полезность требовать от производителей отправки KV-пар?

ответ

26

Кафка использует абстракцию распределенного журнала, который состоит из разделов . Разбиение журнала на разделы позволяет масштабировать систему.

Ключи используются для определения раздела в журнале, к которому добавлено сообщение get. Пока значение представляет собой фактическую полезную нагрузку сообщения. Примеры на самом деле не очень «хороши» в этом отношении; обычно у вас будет сложный тип как значение (например, тип tuple или JSON или аналогичный), и вы извлечете одно поле в качестве ключа.

См: http://kafka.apache.org/intro#intro_topics и http://kafka.apache.org/intro#intro_producers

В общем ключ и/или значение может быть null тоже. Если ключ null, то будет выбран случайный раздел. Если значение null, то может использовать специальную семантику «удалить», если вы включите log-compaction вместо политики сохранения журнала для темы (http://kafka.apache.org/documentation#compaction).

+1

И, в частности, клавиши также играют важную роль в потоковом API Kafka с помощью 'KStream' и' KTable' - см. [Здесь] (http://docs.confluent.io/current/streams/developer-guide .html # потоки-разработчик-гид-DSL). – reim

+1

Ключи *** могут использоваться для определения раздела, но это всего лишь стандартная стратегия производителя. В конечном итоге именно *** продюсер *** выбирает, какой раздел использовать. – gvo

 Смежные вопросы

  • Нет связанных вопросов^_^